re PR libgcj/8995 (race cases in interpreter)
2008-08-22 Andrew Haley <aph@redhat.com> PR libgcj/8895: * interpret-run.cc (REWRITE_INSN): Null this macro. * include/jvm.h (class _Jv_Linker): Declare resolve_mutex, init. (read_cpool_entry, write_cpool_entry): New functions. * link.cc (_Jv_Linker::resolve_mutex): new. (_Jv_Linker::init): New function. (_Jv_Linker::resolve_pool_entry): Use {read,write}_cpool_entry to ensure atomic access to constant pool entries. From-SVN: r139492
This commit is contained in:
parent
c9f1fdfe4c
commit
e4493315fc
4 changed files with 106 additions and 31 deletions
|
@ -308,6 +308,9 @@ private:
|
|||
s = signature;
|
||||
}
|
||||
|
||||
static _Jv_Mutex_t resolve_mutex;
|
||||
static void init (void) __attribute__((constructor));
|
||||
|
||||
public:
|
||||
|
||||
static bool has_field_p (jclass, _Jv_Utf8Const *);
|
||||
|
@ -325,6 +328,27 @@ public:
|
|||
_Jv_Utf8Const *,
|
||||
bool check_perms = true);
|
||||
static void layout_vtable_methods(jclass);
|
||||
|
||||
static jbyte read_cpool_entry (_Jv_word *data,
|
||||
const _Jv_Constants *const pool,
|
||||
int index)
|
||||
{
|
||||
_Jv_MutexLock (&resolve_mutex);
|
||||
jbyte tags = pool->tags[index];
|
||||
*data = pool->data[index];
|
||||
_Jv_MutexUnlock (&resolve_mutex);
|
||||
return tags;
|
||||
}
|
||||
|
||||
static void write_cpool_entry (_Jv_word data, jbyte tags,
|
||||
_Jv_Constants *pool,
|
||||
int index)
|
||||
{
|
||||
_Jv_MutexLock (&resolve_mutex);
|
||||
pool->data[index] = data;
|
||||
pool->tags[index] = tags;
|
||||
_Jv_MutexUnlock (&resolve_mutex);
|
||||
}
|
||||
};
|
||||
|
||||
/* Type of pointer used as finalizer. */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue