CVSROOT: /sources/classpath Module name: classpath Changes by: Keith Seitz <keiths> 06/06/16 18:32:49
Modified files: . : ChangeLog gnu/classpath/jdwp: Jdwp.java gnu/classpath/jdwp/transport: JdwpConnection.java gnu/classpath/jdwp/processor: PacketProcessor.java Log message: * gnu/classpath/jdwp/Jdwp.java (_initLock): New field. (_initCount): New field. (Jdwp): Don't set isDebugging until fully initialized. (subcomponentInitialized): New method. (run): Wait for PacketProcessor and JdwpConnection to startup, then set isDebugging, and then let this thread die. * gnu/classpath/jdwp/transport/JdwpConnection.java (run): Add synchronization notification. * gnu/classpath/jdwp/processor/PacketProcessor.java (run): Likewise. CVSWeb URLs: http://cvs.savannah.gnu.org/viewcvs/classpath/ChangeLog?cvsroot=classpath&r1=1.7851&r2=1.7852 http://cvs.savannah.gnu.org/viewcvs/classpath/gnu/classpath/jdwp/Jdwp.java?cvsroot=classpath&r1=1.6&r2=1.7 http://cvs.savannah.gnu.org/viewcvs/classpath/gnu/classpath/jdwp/transport/JdwpConnection.java?cvsroot=classpath&r1=1.5&r2=1.6 http://cvs.savannah.gnu.org/viewcvs/classpath/gnu/classpath/jdwp/processor/PacketProcessor.java?cvsroot=classpath&r1=1.5&r2=1.6 Patches: Index: ChangeLog =================================================================== RCS file: /sources/classpath/classpath/ChangeLog,v retrieving revision 1.7851 retrieving revision 1.7852 diff -u -b -r1.7851 -r1.7852 --- ChangeLog 16 Jun 2006 18:28:45 -0000 1.7851 +++ ChangeLog 16 Jun 2006 18:32:48 -0000 1.7852 @@ -1,3 +1,17 @@ +2006-06-16 Keith Seitz <[EMAIL PROTECTED]> + + * gnu/classpath/jdwp/Jdwp.java (_initLock): New field. + (_initCount): New field. + (Jdwp): Don't set isDebugging until fully initialized. + (subcomponentInitialized): New method. + (run): Wait for PacketProcessor and JdwpConnection to + startup, then set isDebugging, and then let this thread + die. + * gnu/classpath/jdwp/transport/JdwpConnection.java + (run): Add synchronization notification. + * gnu/classpath/jdwp/processor/PacketProcessor.java + (run): Likewise. + 2006-06-16 Tom Tromey <[EMAIL PROTECTED]> * NEWS: Updated for JSR 166. Index: gnu/classpath/jdwp/Jdwp.java =================================================================== RCS file: /sources/classpath/classpath/gnu/classpath/jdwp/Jdwp.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -b -r1.6 -r1.7 --- gnu/classpath/jdwp/Jdwp.java 16 Mar 2006 23:26:10 -0000 1.6 +++ gnu/classpath/jdwp/Jdwp.java 16 Jun 2006 18:32:48 -0000 1.7 @@ -56,6 +56,9 @@ /** * Main interface from the virtual machine to the JDWP back-end. * + * The thread created by this class is only used for initialization. + * Once it exits, the JDWP backend is fully initialized. + * * @author Keith Seitz ([EMAIL PROTECTED]) */ public class Jdwp @@ -65,7 +68,8 @@ private static Jdwp _instance = null; /** - * Are we debugging? + * Are we debugging? Only true if debugging + * *and* initialized. */ public static boolean isDebugging = false; @@ -89,13 +93,16 @@ // A thread group for the JDWP threads private ThreadGroup _group; + // Initialization synchronization + private Object _initLock = new Object (); + private int _initCount = 0; + /** * constructor */ public Jdwp () { _shutdown = false; - isDebugging = true; _instance = this; } @@ -271,17 +278,45 @@ } } + /** + * Allows subcomponents to specify that they are + * initialized. + * + * Subcomponents include JdwpConnection and PacketProcessor. + */ + public void subcomponentInitialized () + { + synchronized (_initLock) + { + ++_initCount; + _initLock.notify (); + } + } + public void run () { try { _doInitialization (); + + /* We need a little internal synchronization here, so that + when this thread dies, the back-end will be fully initialized, + ready to start servicing the VM and debugger. */ + synchronized (_initLock) + { + while (_initCount != 2) + _initLock.wait (); + } + _initLock = null; } catch (Throwable t) { System.out.println ("Exception in JDWP back-end: " + t); System.exit (1); } + + // Now we are finally ready and initialized + isDebugging = true; } // A helper function to process the configure string "-Xrunjdwp:..." Index: gnu/classpath/jdwp/transport/JdwpConnection.java =================================================================== RCS file: /sources/classpath/classpath/gnu/classpath/jdwp/transport/JdwpConnection.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -b -r1.5 -r1.6 --- gnu/classpath/jdwp/transport/JdwpConnection.java 3 Sep 2005 00:22:30 -0000 1.5 +++ gnu/classpath/jdwp/transport/JdwpConnection.java 16 Jun 2006 18:32:49 -0000 1.6 @@ -1,5 +1,5 @@ /* JdwpConnection.java -- A JDWP-speaking connection - Copyright (C) 2005 Free Software Foundation + Copyright (C) 2005, 2006 Free Software Foundation This file is part of GNU Classpath. @@ -165,6 +165,10 @@ */ public void run () { + // Notify initialization thread (gnu.classpath.jdwp.Jdwp) that + // the JdwpConnection thread is ready. + Jdwp.getDefault().subcomponentInitialized (); + while (!_shutdown) { try Index: gnu/classpath/jdwp/processor/PacketProcessor.java =================================================================== RCS file: /sources/classpath/classpath/gnu/classpath/jdwp/processor/PacketProcessor.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -b -r1.5 -r1.6 --- gnu/classpath/jdwp/processor/PacketProcessor.java 27 Jul 2005 19:04:14 -0000 1.5 +++ gnu/classpath/jdwp/processor/PacketProcessor.java 16 Jun 2006 18:32:49 -0000 1.6 @@ -1,6 +1,6 @@ /* PacketProcessor.java -- a thread which processes command packets from the debugger - Copyright (C) 2005 Free Software Foundation + Copyright (C) 2005, 2006 Free Software Foundation This file is part of GNU Classpath. @@ -137,6 +137,10 @@ */ public Object run () { + // Notify initialization thread (gnu.classpath.jdwp.Jdwp) that + // the PacketProcessor thread is ready. + Jdwp.getDefault().subcomponentInitialized (); + try { while (!_shutdown) @@ -144,7 +148,7 @@ _processOnePacket (); } } - catch (IOException ex) + catch (Exception ex) { ex.printStackTrace(); }