diff --git a/src/main/java/lua/debug/DebugStackState.java b/src/main/java/lua/debug/DebugStackState.java index 150e1aea..4d3d486a 100644 --- a/src/main/java/lua/debug/DebugStackState.java +++ b/src/main/java/lua/debug/DebugStackState.java @@ -128,12 +128,13 @@ public class DebugStackState extends StackState implements DebugRequestListener // debug hooks public void debugHooks( int pc ) { - if(DebugUtils.IS_DEBUG) + if ( exiting ) { + throw new AbortException("aborted by debug client"); + } + + if(DebugUtils.IS_DEBUG) DebugUtils.println("entered debugHook..."); - if ( exiting ) - throw new AbortException("exiting"); - synchronized ( this ) { // anytime the line doesn't change we keep going diff --git a/src/main/java/lua/debug/j2se/DebugSupport.java b/src/main/java/lua/debug/j2se/DebugSupport.java index de0067ee..daafd58e 100644 --- a/src/main/java/lua/debug/j2se/DebugSupport.java +++ b/src/main/java/lua/debug/j2se/DebugSupport.java @@ -36,12 +36,12 @@ import lua.debug.request.DebugRequest; import lua.debug.request.DebugRequestListener; import lua.debug.response.DebugResponse; -public class DebugSupport implements DebugEventListener { +public class DebugSupport implements DebugRequestListener, DebugEventListener { protected static final int UNKNOWN = 0; protected static final int RUNNING = 1; protected static final int STOPPED = 2; - protected DebugRequestListener listener; + protected DebugRequestListener vm; protected int requestPort; protected int eventPort; protected Thread requestWatcherThread; @@ -56,10 +56,10 @@ public class DebugSupport implements DebugEventListener { protected Socket clientEventSocket; protected DataOutputStream eventWriter; - public DebugSupport(DebugRequestListener listener, - int requestPort, - int eventPort) { - this.listener = listener; + public DebugSupport(DebugRequestListener vm, + int requestPort, + int eventPort) { + this.vm = vm; this.requestPort = requestPort; this.eventPort = eventPort; } @@ -139,7 +139,7 @@ public class DebugSupport implements DebugEventListener { this.state = RUNNING; } - public synchronized int getState() { + protected synchronized int getState() { return this.state; } @@ -147,7 +147,7 @@ public class DebugSupport implements DebugEventListener { this.state = STOPPED; } - public void handleRequest() { + protected void handleRequest() { synchronized (clientRequestSocket) { try { while (getState() != STOPPED) { @@ -158,7 +158,7 @@ public class DebugSupport implements DebugEventListener { = (DebugRequest) SerializationHelper.deserialize(data); DebugUtils.println("SERVER receives request: " + request.toString()); - DebugResponse response = listener.handleRequest(request); + DebugResponse response = handleRequest(request); data = SerializationHelper.serialize(response); requestWriter.writeInt(data.length); requestWriter.write(data); @@ -203,7 +203,7 @@ public class DebugSupport implements DebugEventListener { * * @param event */ - public void fireEvent(DebugEvent event) { + protected void sendEvent(DebugEvent event) { DebugUtils.println("SERVER sending event: " + event.toString()); synchronized (eventSocket) { try { @@ -221,6 +221,18 @@ public class DebugSupport implements DebugEventListener { * @see lua.debug.DebugEventListener#notifyDebugEvent(lua.debug.DebugEvent) */ public void notifyDebugEvent(DebugEvent event) { - fireEvent(event); - } + sendEvent(event); + } + + /* (non-Javadoc) + * @see lua.debug.DebugRequestListener#handleRequest(java.lang.String) + */ + public DebugResponse handleRequest(DebugRequest request) { + if (DebugUtils.IS_DEBUG) { + DebugUtils.println("handling request: " + request.toString()); + } + + DebugResponse response = vm.handleRequest(request); + return response; + } } diff --git a/src/main/java/lua/debug/j2se/StandardLuaJVM.java b/src/main/java/lua/debug/j2se/StandardLuaJVM.java index 3c396f75..cfc0904c 100644 --- a/src/main/java/lua/debug/j2se/StandardLuaJVM.java +++ b/src/main/java/lua/debug/j2se/StandardLuaJVM.java @@ -245,7 +245,7 @@ public class StandardLuaJVM implements DebugRequestListener { } }).start(); - debugSupport.fireEvent(new DebugEvent(DebugEventType.started)); + debugSupport.notifyDebugEvent(new DebugEvent(DebugEventType.started)); } private DebugStackState getDebugState() { @@ -260,17 +260,16 @@ public class StandardLuaJVM implements DebugRequestListener { throw new UnsupportedOperationException("Must be in debug mode to handle the debug requests"); } - DebugUtils.println("handling request: " + request.toString()); DebugRequestType requestType = request.getType(); if (DebugRequestType.suspend == requestType) { DebugResponse status = getDebugState().handleRequest(request); DebugEvent event = new DebugEvent(DebugEventType.suspendedByClient); - debugSupport.fireEvent(event); + debugSupport.notifyDebugEvent(event); return status; } else if (DebugRequestType.resume == requestType) { DebugResponse status = getDebugState().handleRequest(request); DebugEvent event = new DebugEvent(DebugEventType.resumedByClient); - debugSupport.fireEvent(event); + debugSupport.notifyDebugEvent(event); return status; } else if (DebugRequestType.exit == requestType) { stop(); @@ -281,17 +280,16 @@ public class StandardLuaJVM implements DebugRequestListener { } protected void stop() { - DebugUtils.println("exit LuaJ VM..."); if (this.debugSupport != null) { DebugEvent event = new DebugEvent(DebugEventType.terminated); - debugSupport.fireEvent(event); + debugSupport.notifyDebugEvent(event); Timer timer = new Timer("DebugServerDeathThread"); timer.schedule(new TimerTask() { public void run() { debugSupport.stop(); debugSupport = null; } - }, 500); + }, 300); } getDebugState().exit(); }