Author: mturk Date: Wed Apr 22 12:17:44 2009 New Revision: 767480 URL: http://svn.apache.org/viewvc?rev=767480&view=rev Log: Sync access to the Pointer and Descriptor from the native
Modified: commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c Modified: commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c?rev=767480&r1=767479&r2=767480&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c (original) +++ commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c Wed Apr 22 12:17:44 2009 @@ -175,6 +175,13 @@ jniptr p = GET_IFIELD_P(0001, _O); jniptr c = GET_IFIELD_P(0002, _O); + if ((*_E)->MonitorEnter(_E, _O)) { + /* Object locking failed */ + return ACR_ENOLOCK; + } + i = GET_IFIELD_I(0000, _O); + p = GET_IFIELD_P(0001, _O); + c = GET_IFIELD_P(0002, _O); if (p) { SET_IFIELD_P(0001, _O, 0); } @@ -184,6 +191,7 @@ if (i >= 0) { SET_IFIELD_I(0000, _O, -1); } + (*_E)->MonitorExit(_E, _O); callback = (acr_descriptor_callback_fn_t *)((acr_ptr_t)c); if (callback) { @@ -229,14 +237,18 @@ ACR_DECLARE(int) ACR_DescriptorSetPtr(ACR_JNISTDARGS, void *p) { if (_clazzn.i && J4MID(0000)) { + if ((*_E)->MonitorEnter(_E, _O)) { + /* Object locking failed */ + return ACR_ENOLOCK; + } SET_IFIELD_P(0001, _O, (jniptr)((acr_ptr_t)p)); #ifdef _JNI_CHECK_EXCEPTIONS if ((*_E)->ExceptionCheck(_E)) { return ACR_EGENERAL; } - else #endif - return ACR_SUCCESS; + (*_E)->MonitorExit(_E, _O); + return ACR_SUCCESS; } else { return ACR_ECLASSNOTFOUND; @@ -246,14 +258,18 @@ ACR_DECLARE(int) ACR_DescriptorSetInt(ACR_JNISTDARGS, int i) { if (_clazzn.i && J4MID(0000)) { + if ((*_E)->MonitorEnter(_E, _O)) { + /* Object locking failed */ + return ACR_ENOLOCK; + } SET_IFIELD_I(0000, _O, i); #ifdef _JNI_CHECK_EXCEPTIONS if ((*_E)->ExceptionCheck(_E)) { return ACR_EGENERAL; } - else #endif - return ACR_SUCCESS; + (*_E)->MonitorExit(_E, _O); + return ACR_SUCCESS; } else { return ACR_ECLASSNOTFOUND; Modified: commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c?rev=767480&r1=767479&r2=767480&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c (original) +++ commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c Wed Apr 22 12:17:44 2009 @@ -161,15 +161,22 @@ { if (_clazzn.i && J4MID(0000) && _O) { acr_pointer_cleanup_fn_t *cleanup; - jniptr h = GET_IFIELD_P(0000, _O); - jniptr c = GET_IFIELD_P(0001, _O); + jniptr h; + jniptr c; + if ((*_E)->MonitorEnter(_E, _O)) { + /* Object locking failed */ + return ACR_ENOLOCK; + } + h = GET_IFIELD_P(0000, _O); + c = GET_IFIELD_P(0001, _O); if (h) { SET_IFIELD_P(0000, _O, 0); } if (c) { SET_IFIELD_P(0001, _O, 0); } + (*_E)->MonitorExit(_E, _O); cleanup = (acr_pointer_cleanup_fn_t *)((acr_ptr_t)c); if (cleanup) { int rc = (*cleanup)((void *)((acr_ptr_t)h)); @@ -206,6 +213,11 @@ ACR_DECLARE(int) ACR_PointerSet(ACR_JNISTDARGS, void *p, size_t len) { if (_clazzn.i && J4MID(0000) && _O) { + if ((*_E)->MonitorEnter(_E, _O)) { + /* Object locking failed */ + return ACR_ENOLOCK; + } + SET_IFIELD_P(0000, _O, (jniptr)((acr_ptr_t)p)); #ifdef _JNI_CHECK_EXCEPTIONS if ((*_E)->ExceptionCheck(_E)) { @@ -220,6 +232,7 @@ } #endif } + (*_E)->MonitorExit(_E, _O); return ACR_SUCCESS; } else {