From 6c94c098de596f43ea43eb944e3dc15e0b77adf6 Mon Sep 17 00:00:00 2001 From: Michael Starzinger Date: Wed, 20 Aug 2008 18:30:24 +0200 Subject: [PATCH] * src/vm/linker.h (linker_classrenumber_mutex): Use mutex instead of java object for locking. Renamed from linker_classrenumber_lock. * src/vm/linker.c: Adapted to above change. * src/vm/builtin.c: Likewise. * src/vm/class.c: Likewise. --- src/vm/builtin.c | 13 +++++++------ src/vm/class.c | 5 +++-- src/vm/linker.c | 13 ++++++------- src/vm/linker.h | 4 +++- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/vm/builtin.c b/src/vm/builtin.c index 58b4a5cc0..ddf665c79 100644 --- a/src/vm/builtin.c +++ b/src/vm/builtin.c @@ -53,6 +53,7 @@ #include "native/llni.h" #include "threads/lock-common.h" +#include "threads/mutex.hpp" #include "threads/thread.hpp" #include "toolbox/logging.h" @@ -698,7 +699,7 @@ bool builtin_fast_canstore(java_objectarray_t *oa, java_object_t *o) if (valuevftbl == componentvftbl) return 1; - LOCK_MONITOR_ENTER(linker_classrenumber_lock); + Mutex_lock(linker_classrenumber_mutex); baseval = componentvftbl->baseval; @@ -713,7 +714,7 @@ bool builtin_fast_canstore(java_objectarray_t *oa, java_object_t *o) result = diffval <= (uint32_t) componentvftbl->diffval; } - LOCK_MONITOR_EXIT(linker_classrenumber_lock); + Mutex_unlock(linker_classrenumber_mutex); } else if (valuedesc == NULL) { /* {oa has dimension > 1} */ @@ -765,7 +766,7 @@ bool builtin_fast_canstore_onedim(java_objectarray_t *a, java_object_t *o) if (valuevftbl == elementvftbl) return 1; - LOCK_MONITOR_ENTER(linker_classrenumber_lock); + Mutex_lock(linker_classrenumber_mutex); baseval = elementvftbl->baseval; @@ -779,7 +780,7 @@ bool builtin_fast_canstore_onedim(java_objectarray_t *a, java_object_t *o) result = diffval <= (uint32_t) elementvftbl->diffval; } - LOCK_MONITOR_EXIT(linker_classrenumber_lock); + Mutex_unlock(linker_classrenumber_mutex); return result; } @@ -814,12 +815,12 @@ bool builtin_fast_canstore_onedim_class(java_objectarray_t *a, java_object_t *o) if (valuevftbl == elementvftbl) return 1; - LOCK_MONITOR_ENTER(linker_classrenumber_lock); + Mutex_lock(linker_classrenumber_mutex); diffval = valuevftbl->baseval - elementvftbl->baseval; result = diffval <= (uint32_t) elementvftbl->diffval; - LOCK_MONITOR_EXIT(linker_classrenumber_lock); + Mutex_unlock(linker_classrenumber_mutex); return result; } diff --git a/src/vm/class.c b/src/vm/class.c index 1b547b3bf..d4d3d989b 100644 --- a/src/vm/class.c +++ b/src/vm/class.c @@ -39,6 +39,7 @@ #include "native/llni.h" #include "threads/lock-common.h" +#include "threads/mutex.hpp" #include "toolbox/logging.h" @@ -1475,12 +1476,12 @@ bool class_isanysubclass(classinfo *sub, classinfo *super) if (sub->flags & ACC_INTERFACE) return (super == class_java_lang_Object); - LOCK_MONITOR_ENTER(linker_classrenumber_lock); + Mutex_lock(linker_classrenumber_mutex); diffval = sub->vftbl->baseval - super->vftbl->baseval; result = diffval <= (uint32_t) super->vftbl->diffval; - LOCK_MONITOR_EXIT(linker_classrenumber_lock); + Mutex_unlock(linker_classrenumber_mutex); } return result; diff --git a/src/vm/linker.c b/src/vm/linker.c index 622935cdd..21c026aee 100644 --- a/src/vm/linker.c +++ b/src/vm/linker.c @@ -35,6 +35,7 @@ #include "native/native.h" #include "threads/lock-common.h" +#include "threads/mutex.hpp" #include "toolbox/logging.h" @@ -92,7 +93,7 @@ classinfo *resolve_classref_or_classinfo_eager(classref_or_classinfo cls, bool c static s4 interfaceindex; /* sequential numbering of interfaces */ static s4 classvalue; -java_object_t *linker_classrenumber_lock; +Mutex *linker_classrenumber_mutex; /* private functions **********************************************************/ @@ -121,11 +122,9 @@ void linker_preinit(void) interfaceindex = 0; #if defined(ENABLE_THREADS) - /* create the global lock object */ + /* create the global mutex */ - linker_classrenumber_lock = NEW(java_object_t); - - LOCK_INIT_OBJECT_LOCK(linker_classrenumber_lock); + linker_classrenumber_mutex = Mutex_new(); #endif /* Link the most basic classes. */ @@ -1119,7 +1118,7 @@ static arraydescriptor *link_array(classinfo *c) static void linker_compute_subclasses(classinfo *c) { - LOCK_MONITOR_ENTER(linker_classrenumber_lock); + Mutex_lock(linker_classrenumber_mutex); if (!(c->flags & ACC_INTERFACE)) { c->nextsub = NULL; @@ -1137,7 +1136,7 @@ static void linker_compute_subclasses(classinfo *c) linker_compute_class_values(class_java_lang_Object); - LOCK_MONITOR_EXIT(linker_classrenumber_lock); + Mutex_unlock(linker_classrenumber_mutex); } diff --git a/src/vm/linker.h b/src/vm/linker.h index a11f80cd0..2e518bb84 100644 --- a/src/vm/linker.h +++ b/src/vm/linker.h @@ -36,6 +36,8 @@ typedef struct primitivetypeinfo primitivetypeinfo; #include "config.h" #include "vm/types.h" +#include "threads/mutex.hpp" + #include "vm/class.h" #include "vm/references.h" @@ -136,7 +138,7 @@ struct arraydescriptor { /* This lock must be taken while renumbering classes or while atomically */ /* accessing classes. */ -extern java_object_t *linker_classrenumber_lock; +extern Mutex *linker_classrenumber_mutex; /* function prototypes ********************************************************/ -- 2.25.1