You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2013/03/13 08:00:46 UTC
svn commit: r1455823 - in /commons/proper/daemon/branches/1.0.x:
RELEASE-NOTES.txt src/native/windows/src/javajni.c
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).