Author: mturk
Date: Wed Mar 13 07:00:45 2013
New Revision: 1455823

URL: http://svn.apache.org/r1455823
Log:
DAEMON-286: Ensure we have a full thread sync

Modified:
    commons/proper/daemon/branches/1.0.x/RELEASE-NOTES.txt
    commons/proper/daemon/branches/1.0.x/src/native/windows/src/javajni.c

Modified: commons/proper/daemon/branches/1.0.x/RELEASE-NOTES.txt
URL: 
http://svn.apache.org/viewvc/commons/proper/daemon/branches/1.0.x/RELEASE-NOTES.txt?rev=1455823&r1=1455822&r2=1455823&view=diff
==============================================================================
--- commons/proper/daemon/branches/1.0.x/RELEASE-NOTES.txt (original)
+++ commons/proper/daemon/branches/1.0.x/RELEASE-NOTES.txt Wed Mar 13 07:00:45 
2013
@@ -84,7 +84,7 @@ NEW FEATURES:
 
 BUG FIXES:
 
-1.0.14: DAEMON-278, DAEMON-280, DAEMON-281, DAEMON-283, DAEMON-284,
+1.0.14: DAEMON-278, DAEMON-280, DAEMON-281, DAEMON-283, DAEMON-284, DAEMON-286,
         DAEMON-287
 
 1.0.13: DAEMON-275, DAEMON-276

Modified: commons/proper/daemon/branches/1.0.x/src/native/windows/src/javajni.c
URL: 
http://svn.apache.org/viewvc/commons/proper/daemon/branches/1.0.x/src/native/windows/src/javajni.c?rev=1455823&r1=1455822&r2=1455823&view=diff
==============================================================================
--- commons/proper/daemon/branches/1.0.x/src/native/windows/src/javajni.c 
(original)
+++ commons/proper/daemon/branches/1.0.x/src/native/windows/src/javajni.c Wed 
Mar 13 07:00:45 2013
@@ -113,6 +113,7 @@ typedef struct APXJAVAVM {
     DWORD           dwWorkerStatus;
     SIZE_T          szStackSize;
     HANDLE          hWorkerSync;
+    HANDLE          hWorkerInit;
 } APXJAVAVM, *LPAPXJAVAVM;
 
 /* This is no longer exported in jni.h
@@ -927,7 +928,9 @@ static DWORD WINAPI __apxJavaWorkerThrea
     apxLogWrite(APXLOG_MARK_DEBUG "Java Worker thread started %s:%s",
                 lpJava->clWorker.sClazz, lpJava->clWorker.sMethod);
     lpJava->dwWorkerStatus = 1;
-    SetEvent(lpJava->hWorkerSync);
+    SetEvent(lpJava->hWorkerInit);
+    /* Ensure apxJavaStart readed our status */
+    WaitForSingleObject(lpJava->hWorkerSync, INFINITE);    
     JNICALL_3(CallStaticVoidMethod,
               lpJava->clWorker.jClazz,
               lpJava->clWorker.jMethod,
@@ -947,7 +950,7 @@ finished:
         lpJava->dwWorkerStatus = 0;
         apxLogWrite(APXLOG_MARK_DEBUG "Java Worker thread finished %s:%s with 
status=%d",
                     lpJava->clWorker.sClazz, lpJava->clWorker.sMethod, rv);
-        SetEvent(lpJava->hWorkerSync);
+        SetEvent(lpJava->hWorkerInit);
     }
     ExitThread(rv);
     /* never gets here but keep the compiler happy */
@@ -962,6 +965,7 @@ apxJavaStart(LPAPXJAVA_THREADARGS pArgs)
     if (!lpJava)
         return FALSE;
     lpJava->dwWorkerStatus = 0;
+    lpJava->hWorkerInit    = CreateEvent(NULL, FALSE, FALSE, NULL);
     lpJava->hWorkerSync    = CreateEvent(NULL, FALSE, FALSE, NULL);
     lpJava->hWorkerThread  = CreateThread(NULL,
                                           lpJava->szStackSize,
@@ -974,9 +978,10 @@ apxJavaStart(LPAPXJAVA_THREADARGS pArgs)
     }
     ResumeThread(lpJava->hWorkerThread);
     /* Wait until the worker thread initializes */
-    WaitForSingleObject(lpJava->hWorkerSync, INFINITE);
+    WaitForSingleObject(lpJava->hWorkerInit, INFINITE);
     if (lpJava->dwWorkerStatus == 0)
         return FALSE;
+    SetEvent(lpJava->hWorkerSync);
     if (lstrcmpA(lpJava->clWorker.sClazz, "java/lang/System")) {
         /* Give some time to initialize the thread
          * Unless we are calling System.exit(0).


Reply via email to