Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: threads.h 4866 2006-05-01 21:40:38Z edwin $
-
*/
#include "vm/types.h"
-#include "vm/global.h"
-
-
-
-/* typedefs *******************************************************************/
+#include "native/llni.h"
-typedef struct lock_execution_env_t lock_execution_env_t;
-typedef struct lock_record_t lock_record_t;
-typedef struct lock_record_pool_header_t lock_record_pool_header_t;
-typedef struct lock_record_pool_t lock_record_pool_t;
-typedef struct lock_waiter_t lock_waiter_t;
-typedef struct lock_hashtable_t lock_hashtable_t;
+#include "toolbox/list.h"
+#include "vm/global.h"
-/* lock_execution_env_t ********************************************************
- Execution environment. Contains the lock record freelist and pools.
-*******************************************************************************/
+/* typedefs *******************************************************************/
-struct lock_execution_env_t {
- lock_record_t *firstfree; /* lock record freelist */
- lock_record_pool_t *lockrecordpools; /* list of per-thread pools */
- int lockrecordcount; /* # of records for this thread */
-};
+typedef struct lock_record_t lock_record_t;
+typedef struct lock_waiter_t lock_waiter_t;
+typedef struct lock_hashtable_t lock_hashtable_t;
/* lock_waiter_t ***************************************************************
*******************************************************************************/
struct lock_waiter_t {
- struct threadobject *waiter; /* the waiting thread */
- lock_waiter_t *next; /* next in list */
+ struct threadobject *thread; /* the waiting thread */
+ listnode_t linkage;
};
*******************************************************************************/
struct lock_record_t {
- java_objectheader *obj; /* object for which this lock is */
+ java_object_t *object; /* object for which this lock is */
struct threadobject *owner; /* current owner of this monitor */
s4 count; /* recursive lock count */
pthread_mutex_t mutex; /* mutex for synchronizing */
- lock_waiter_t *waiters; /* list of threads waiting */
- lock_record_t *nextfree; /* next in free list */
+ list_t *waiters; /* list of threads waiting */
lock_record_t *hashlink; /* next record in hash chain */
};
};
-/* lock_record_pool_header_t ***************************************************
-
- Lock records are allocated in pools. Each pool has on of these headers.
-
-*******************************************************************************/
-
-struct lock_record_pool_header_t {
- lock_record_pool_t *next; /* next pool */
- int size; /* records in this pool */
-};
-
-
-/* lock_record_pool_t **********************************************************
-
- Lock records are allocated in such pools.
-
-*******************************************************************************/
-
-struct lock_record_pool_t {
- lock_record_pool_header_t header; /* pool header (see above) */
- lock_record_t lr[1]; /* variable array of records */
-};
-
-#if defined(ENABLE_JVMTI)
-extern pthread_mutex_t lock_global_pool_lock;
-extern lock_record_pool_t *lock_global_pool;
-#endif
-
+/* defines ********************************************************************/
-/* defines *********************************************************************/
+#define LOCK_INIT_OBJECT_LOCK(o) lock_init_object_lock((java_object_t *) (o))
-#define LOCK_INIT_OBJECT_LOCK(o) lock_init_object_lock((java_objectheader *) (o))
+#define LOCK_MONITOR_ENTER(o) lock_monitor_enter((java_handle_t *) LLNI_QUICKWRAP(o))
+#define LOCK_MONITOR_EXIT(o) lock_monitor_exit((java_handle_t *) LLNI_QUICKWRAP(o))
-#define LOCK_MONITOR_ENTER(o) lock_monitor_enter((java_objectheader *) (o))
-#define LOCK_MONITOR_EXIT(o) lock_monitor_exit((java_objectheader *) (o))
+#define LOCK_WAIT_FOREVER(o) lock_wait_for_object((java_handle_t *) LLNI_QUICKWRAP(o), 0, 0)
+#define LOCK_NOTIFY(o) lock_notify_object((java_handle_t *) LLNI_QUICKWRAP(o))
#endif /* _LOCK_H */