diff options
Diffstat (limited to 'libjava/classpath/gnu/classpath/jdwp/event/EventManager.java')
-rw-r--r-- | libjava/classpath/gnu/classpath/jdwp/event/EventManager.java | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/libjava/classpath/gnu/classpath/jdwp/event/EventManager.java b/libjava/classpath/gnu/classpath/jdwp/event/EventManager.java index 54a7b08312d..aa3d5d6292c 100644 --- a/libjava/classpath/gnu/classpath/jdwp/event/EventManager.java +++ b/libjava/classpath/gnu/classpath/jdwp/event/EventManager.java @@ -1,5 +1,5 @@ /* EventManager.java -- event management and notification infrastructure - Copyright (C) 2005, 2006 Free Software Foundation + Copyright (C) 2005, 2006, 2007 Free Software Foundation This file is part of GNU Classpath. @@ -39,10 +39,12 @@ exception statement from your version. */ package gnu.classpath.jdwp.event; +import gnu.classpath.jdwp.Jdwp; import gnu.classpath.jdwp.VMVirtualMachine; import gnu.classpath.jdwp.exception.InvalidEventTypeException; import gnu.classpath.jdwp.exception.JdwpException; +import java.util.ArrayList; import java.util.Collection; import java.util.Hashtable; import java.util.Iterator; @@ -130,9 +132,10 @@ public class EventManager // only two: VM_INIT, VM_DEATH try { + byte sp = (Jdwp.suspendOnStartup() + ? EventRequest.SUSPEND_THREAD : EventRequest.SUSPEND_NONE); requestEvent (new EventRequest (0, - EventRequest.EVENT_VM_INIT, - EventRequest.SUSPEND_NONE)); + EventRequest.EVENT_VM_INIT, sp)); requestEvent (new EventRequest (0, EventRequest.EVENT_VM_DEATH, EventRequest.SUSPEND_NONE)); @@ -144,39 +147,39 @@ public class EventManager } /** - * Returns a request for the given event. This method will only + * Returns all requests for the given event. This method will only * be used if the <code>EventManager</code> is handling event filtering. * * @param event the event - * @return request that was interested in this event + * @return requests that are interested in this event * or <code>null</code> if none (and event should not be sent) * @throws IllegalArgumentException for invalid event kind */ - public EventRequest getEventRequest (Event event) + public EventRequest[] getEventRequests(Event event) { - EventRequest interestedRequest = null; + ArrayList interestedEvents = new ArrayList(); Hashtable requests; - Byte kind = new Byte (event.getEventKind ()); - requests = (Hashtable) _requests.get (kind); + Byte kind = new Byte(event.getEventKind()); + requests = (Hashtable) _requests.get(kind); if (requests == null) { // Did not get a valid event type - throw new IllegalArgumentException ("invalid event kind: " + kind); + throw new IllegalArgumentException("invalid event kind: " + kind); } - boolean match = false; // Loop through the requests. Must look at ALL requests in order // to evaluate all filters (think count filter). - // TODO: What if multiple matches? Spec isn't so clear on this. - Iterator rIter = requests.values().iterator (); - while (rIter.hasNext ()) + Iterator rIter = requests.values().iterator(); + while (rIter.hasNext()) { - EventRequest request = (EventRequest) rIter.next (); - if (request.matches (event)) - interestedRequest = request; + EventRequest request = (EventRequest) rIter.next(); + if (request.matches(event)) + interestedEvents.add(request); } - return interestedRequest; + EventRequest[] r = new EventRequest[interestedEvents.size()]; + interestedEvents.toArray(r); + return r; } /** |