aboutsummaryrefslogtreecommitdiff
path: root/libjava/classpath/gnu/classpath/jdwp/event/EventManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/classpath/gnu/classpath/jdwp/event/EventManager.java')
-rw-r--r--libjava/classpath/gnu/classpath/jdwp/event/EventManager.java39
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;
}
/**