2 * thread-private.h: Private definitions for thread handles
5 * Dick Porter (dick@ximian.com)
7 * (C) 2002 Ximian, Inc.
10 #ifndef _WAPI_THREAD_PRIVATE_H_
11 #define _WAPI_THREAD_PRIVATE_H_
16 #ifdef HAVE_SEMAPHORE_H
17 #include <semaphore.h>
20 #include <mach/mach_init.h>
21 #include <mach/task.h>
22 #include <mach/semaphore.h>
23 typedef semaphore_t MonoSemType
;
24 #define MONO_SEM_INIT(addr,value) semaphore_create (current_task (), (addr), SYNC_POLICY_FIFO, (value))
25 #define MONO_SEM_WAIT(sem) semaphore_wait (*(sem))
26 #define MONO_SEM_POST(sem) semaphore_signal (*(sem))
27 #define MONO_SEM_DESTROY(sem) semaphore_destroy (current_task (), *(sem))
29 typedef sem_t MonoSemType
;
30 #define MONO_SEM_INIT(addr,value) sem_init ((addr), 0, (value))
31 #define MONO_SEM_WAIT(sem) sem_wait ((sem))
32 #define MONO_SEM_POST(sem) sem_post ((sem))
33 #define MONO_SEM_DESTROY(sem) sem_destroy ((sem))
36 /* There doesn't seem to be a defined symbol for this */
37 #define _WAPI_THREAD_CURRENT (gpointer)0xFFFFFFFE
38 extern gpointer
_wapi_thread_duplicate (void);
40 extern struct _WapiHandleOps _wapi_thread_ops
;
47 struct _WapiHandle_thread
50 WapiThreadState state
: 2;
54 /* Fields below this point are only valid for the owning process */
56 GPtrArray
*owned_mutexes
;
58 MonoSemType suspend_sem
;
59 guint32 (*start_routine
)(gpointer arg
);
65 guint32 (*callback
)(gpointer arg
);
69 extern gboolean
_wapi_thread_apc_pending (gpointer handle
);
70 extern gboolean
_wapi_thread_cur_apc_pending (void);
71 extern gboolean
_wapi_thread_dispatch_apc_queue (gpointer handle
);
72 extern void _wapi_thread_own_mutex (gpointer mutex
);
73 extern void _wapi_thread_disown_mutex (gpointer mutex
);
74 extern gpointer
_wapi_thread_handle_from_id (pthread_t tid
);
75 extern void _wapi_thread_set_termination_details (gpointer handle
,
77 extern void _wapi_thread_cleanup (void);
79 #endif /* _WAPI_THREAD_PRIVATE_H_ */