* src/native/llni.h (LLNI_QUICKWRAP): Added new macro.
[cacao.git] / src / threads / native / lock.h
index 89eea9c038d9690236ac57adc7d13f190001c9d2..bbdf83c47e9e1d5795d2f5f7827c72e60b8c065c 100644 (file)
@@ -22,8 +22,6 @@
    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 ***************************************************************
@@ -70,8 +56,8 @@ struct lock_execution_env_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;
 };
 
 
@@ -82,12 +68,11 @@ struct lock_waiter_t {
 *******************************************************************************/
 
 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     */
 };
 
@@ -106,41 +91,15 @@ struct lock_hashtable_t {
 };
 
 
-/* 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 */