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).