* jni.cc (call): Synchronize if required.
From-SVN: r47949
This commit is contained in:
parent
242f4945ac
commit
415791dba8
2 changed files with 16 additions and 0 deletions
|
@ -1,5 +1,7 @@
|
|||
2001-12-12 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* jni.cc (call): Synchronize if required.
|
||||
|
||||
* gij.cc (main): Clarify --help output.
|
||||
|
||||
* gnu/gcj/runtime/StringBuffer.java
|
||||
|
|
|
@ -2066,6 +2066,17 @@ _Jv_JNIMethod::call (ffi_cif *, void *ret, ffi_raw *args, void *__this)
|
|||
if ((_this->self->accflags & java::lang::reflect::Modifier::STATIC))
|
||||
real_args[offset++].ptr = _this->defining_class;
|
||||
|
||||
// In libgcj, the callee synchronizes.
|
||||
jobject sync = NULL;
|
||||
if ((_this->self->accflags & java::lang::reflect::Modifier::SYNCHRONIZED))
|
||||
{
|
||||
if ((_this->self->accflags & java::lang::reflect::Modifier::STATIC))
|
||||
sync = _this->defining_class;
|
||||
else
|
||||
sync = (jobject) args[0].ptr;
|
||||
_Jv_MonitorEnter (sync);
|
||||
}
|
||||
|
||||
// Copy over passed-in arguments.
|
||||
memcpy (&real_args[offset], args, _this->args_raw_size);
|
||||
|
||||
|
@ -2073,6 +2084,9 @@ _Jv_JNIMethod::call (ffi_cif *, void *ret, ffi_raw *args, void *__this)
|
|||
ffi_raw_call (&_this->jni_cif, (void (*)()) _this->function,
|
||||
ret, real_args);
|
||||
|
||||
if (sync != NULL)
|
||||
_Jv_MonitorExit (sync);
|
||||
|
||||
_Jv_JNI_PopSystemFrame (env);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue