From a542c81ec7bbc25c3bf628296ae0795575d06b4b Mon Sep 17 00:00:00 2001 From: Keith Seitz Date: Fri, 16 Dec 2005 23:15:53 +0000 Subject: * gnu/classpath/jdwp/event/EventManager.java (EventManager): Catch all JdwpExceptions when initializing the event table. (requestEvent): Update to allow throwing JdwpException from VMVirtualMachine methods. (deleteRequest): Likewise. (clearRequests): Likewise. * gnu/classpath/jdwp/Jdwp.java (notify): Catch exceptions from sendEvent and _enforceSuspendPolicy. (sendEvent): Do not catch IOException here. (_enforceSuspendPolicy): Update to allow throwing JdwpException from VMVirtualMachine methods. --- gnu/classpath/jdwp/Jdwp.java | 35 ++++++++++++++++++------------ gnu/classpath/jdwp/event/EventManager.java | 10 +++++++-- 2 files changed, 29 insertions(+), 16 deletions(-) (limited to 'gnu/classpath') diff --git a/gnu/classpath/jdwp/Jdwp.java b/gnu/classpath/jdwp/Jdwp.java index bb8f60224..43a37de24 100644 --- a/gnu/classpath/jdwp/Jdwp.java +++ b/gnu/classpath/jdwp/Jdwp.java @@ -42,6 +42,7 @@ package gnu.classpath.jdwp; import gnu.classpath.jdwp.event.Event; import gnu.classpath.jdwp.event.EventManager; import gnu.classpath.jdwp.event.EventRequest; +import gnu.classpath.jdwp.exception.JdwpException; import gnu.classpath.jdwp.id.ThreadId; import gnu.classpath.jdwp.processor.PacketProcessor; import gnu.classpath.jdwp.transport.ITransport; @@ -206,7 +207,20 @@ public class Jdwp EventManager em = EventManager.getDefault (); EventRequest request = em.getEventRequest (event); if (request != null) - sendEvent (request, event); + { + try + { + System.out.println ("Jdwp.notify: sending event " + event); + sendEvent (request, event); + jdwp._enforceSuspendPolicy (request.getSuspendPolicy ()); + } + catch (Exception e) + { + /* Really not much we can do. For now, just print out + a warning to the user. */ + System.out.println ("Jdwp.notify: caught exception: " + e); + } + } } } @@ -217,32 +231,25 @@ public class Jdwp * * @param request the debugger request for the event * @param event the event to send + * @throws IOException if a communications failure occurs */ public static void sendEvent (EventRequest request, Event event) + throws IOException { Jdwp jdwp = getDefault (); if (jdwp != null) { - try - { - // !! May need to implement send queue? - synchronized (jdwp._connection) - { - jdwp._connection.sendEvent (request, event); - } - - // Follow suspend policy - jdwp._enforceSuspendPolicy (request.getSuspendPolicy ()); - } - catch (IOException ie) + // !! May need to implement send queue? + synchronized (jdwp._connection) { - System.out.println ("Jdwp.notify: caught exception: " + ie); + jdwp._connection.sendEvent (request, event); } } } // Helper function to enforce suspend policies on event notification private void _enforceSuspendPolicy (byte suspendPolicy) + throws JdwpException { switch (suspendPolicy) { diff --git a/gnu/classpath/jdwp/event/EventManager.java b/gnu/classpath/jdwp/event/EventManager.java index 436a544eb..82d1d71e4 100644 --- a/gnu/classpath/jdwp/event/EventManager.java +++ b/gnu/classpath/jdwp/event/EventManager.java @@ -41,6 +41,7 @@ package gnu.classpath.jdwp.event; import gnu.classpath.jdwp.VMVirtualMachine; import gnu.classpath.jdwp.exception.InvalidEventTypeException; +import gnu.classpath.jdwp.exception.JdwpException; import java.util.Collection; import java.util.Hashtable; @@ -133,7 +134,7 @@ public class EventManager EventRequest.EVENT_VM_DEATH, EventRequest.SUSPEND_NONE)); } - catch (InvalidEventTypeException e) + catch (JdwpException e) { // This can't happen } @@ -187,9 +188,10 @@ public class EventManager * * @param request the request to monitor * @throws InvalidEventTypeException for invalid event kind + * @throws JdwpException for other errors involving request */ public void requestEvent (EventRequest request) - throws InvalidEventTypeException + throws JdwpException { // Add request to request list Hashtable requests; @@ -212,8 +214,10 @@ public class EventManager * @param kind the event kind * @param id the ID of the request to delete * @throws IllegalArgumentException for invalid event kind + * @throws JdwpException for other errors deleting request */ public void deleteRequest (byte kind, int id) + throws JdwpException { Hashtable requests; requests = (Hashtable) _requests.get (new Byte (kind)); @@ -237,8 +241,10 @@ public class EventManager * * @param kind the event kind * @throws IllegalArgumentException for invalid event kind + * @throws JdwpException for error clearing events */ public void clearRequests (byte kind) + throws JdwpException { Hashtable requests = (Hashtable) _requests.get (new Byte (kind)); if (requests == null) -- cgit v1.2.1