Fix flaky test ThreadStartTest

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
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 @@
         // wait for thread start and finish
         synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
 
-        logWriter.println("=> vmMirror.receiveEvent()...");
-        CommandPacket event = debuggeeWrapper.vmMirror.receiveEvent();
+        // 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!");
+            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());
+            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);
+            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");