summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastien Hertz <shertz@google.com>2015-02-19 18:01:24 +0100
committerSebastien Hertz <shertz@google.com>2015-02-19 18:37:23 +0100
commitd5d6209b5cc789d290237847f0a7a514191092e0 (patch)
tree2762a6d2261f911edb334e016b1eb46cdae2124c
parent6b65531cd7e778e8e30fcf24313e2b4985565822 (diff)
downloadapache-harmony-lollipop-mr1-wfc-release.tar.gz
We may receive THREAD_START events for runtime internal threads (like GCDaemon) before receiving one for the tested thread. We now loop until receiving a THREAD_START event for the tested thread. If we receive a THREAD_START event for another thread, we just ignore it and wait for the next event. Bug: 19438651 (cherry picked from commit 2d5d534cf8b1e4788317678df2301227c16e0433) Change-Id: I6b12ef318ecb779cf9fec66b28c495b34604a668
-rw-r--r--jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ThreadStartTest.java53
1 files changed, 30 insertions, 23 deletions
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ThreadStartTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ThreadStartTest.java
index b13b497..58c696f 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ThreadStartTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ThreadStartTest.java
@@ -69,29 +69,36 @@ public class ThreadStartTest extends JDWPEventTestCase {
// wait for thread start and finish
synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
- logWriter.println("=> vmMirror.receiveEvent()...");
- CommandPacket event = debuggeeWrapper.vmMirror.receiveEvent();
-
- assertNotNull("Invalid (null) event received", event);
- logWriter.println("=> Event received!");
-
- ParsedEvent[] parsedEvents = ParsedEvent.parseEventPacket(event);
- logWriter.println("=> Number of events = " + parsedEvents.length);
- assertEquals("Invalid number of events,", 1, parsedEvents.length);
- logWriter.println("=> EventKind() = " + parsedEvents[0].getEventKind()
- + " (" + JDWPConstants.EventKind.getName(parsedEvents[0].getEventKind()) + ")");
- assertEquals("Invalid event kind,",
- JDWPConstants.EventKind.THREAD_START,
- parsedEvents[0].getEventKind(),
- JDWPConstants.EventKind.getName(JDWPConstants.EventKind.THREAD_START),
- JDWPConstants.EventKind.getName(parsedEvents[0].getEventKind()));
- logWriter.println("=> EventRequestID() = " + parsedEvents[0].getRequestID());
-
- long threadID = ((Event_THREAD_START)parsedEvents[0]).getThreadID();
- logWriter.println("=> threadID = " + threadID);
- String threadName = debuggeeWrapper.vmMirror.getThreadName(threadID);
- logWriter.println("=> threadName = " + threadName);
- assertEquals("Invalid thread name", EventDebuggee.testedThreadName, threadName);
+ // The runtime may start internal threads before starting the debuggee's thread.
+ // We loop until receiving a THREAD_START event for our thread.
+ boolean receivedExpectedThreadStartEvent = false;
+ while (!receivedExpectedThreadStartEvent) {
+ logWriter.println("=> vmMirror.receiveEvent()...");
+ CommandPacket event = debuggeeWrapper.vmMirror.receiveEvent();
+
+ assertNotNull("Invalid (null) event received", event);
+ logWriter.println("=> Event received!");
+
+ ParsedEvent[] parsedEvents = ParsedEvent.parseEventPacket(event);
+ logWriter.println("=> Number of events = " + parsedEvents.length);
+ assertEquals("Invalid number of events,", 1, parsedEvents.length);
+ logWriter.println("=> EventKind() = " + parsedEvents[0].getEventKind()
+ + " (" + JDWPConstants.EventKind.getName(parsedEvents[0].getEventKind()) + ")");
+ assertEquals("Invalid event kind,",
+ JDWPConstants.EventKind.THREAD_START,
+ parsedEvents[0].getEventKind(),
+ JDWPConstants.EventKind.getName(JDWPConstants.EventKind.THREAD_START),
+ JDWPConstants.EventKind.getName(parsedEvents[0].getEventKind()));
+ logWriter.println("=> EventRequestID() = " + parsedEvents[0].getRequestID());
+
+ long threadID = ((Event_THREAD_START)parsedEvents[0]).getThreadID();
+ logWriter.println("=> threadID = " + threadID);
+ String threadName = debuggeeWrapper.vmMirror.getThreadName(threadID);
+ logWriter.println("=> threadName = " + threadName);
+
+ // Is it the debuggee's thread ?
+ receivedExpectedThreadStartEvent = threadName.equals(EventDebuggee.testedThreadName);
+ }
synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
logWriter.println("==> testThreadStartEvent001 - OK");