X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fio-layer%2Fthread-private.h;h=1c62618c8128c69712d301a40e178fcc5af648d0;hb=81b9f09d0f34cbbbc63a9ecddb08df8591769901;hp=179593ad031c73fb56b55e68221f6a6fb3083c7b;hpb=95034981e2061990791d902ef5f7f4aab4edced3;p=mono.git diff --git a/mono/io-layer/thread-private.h b/mono/io-layer/thread-private.h index 179593ad031..1c62618c812 100644 --- a/mono/io-layer/thread-private.h +++ b/mono/io-layer/thread-private.h @@ -13,25 +13,7 @@ #include #include #include -#ifdef HAVE_SEMAPHORE_H -#include -#endif -#ifdef USE_MACH_SEMA -#include -#include -#include -typedef semaphore_t MonoSemType; -#define MONO_SEM_INIT(addr,value) semaphore_create (current_task (), (addr), SYNC_POLICY_FIFO, (value)) -#define MONO_SEM_WAIT(sem) semaphore_wait (*(sem)) -#define MONO_SEM_POST(sem) semaphore_signal (*(sem)) -#define MONO_SEM_DESTROY(sem) semaphore_destroy (current_task (), *(sem)) -#else -typedef sem_t MonoSemType; -#define MONO_SEM_INIT(addr,value) sem_init ((addr), 0, (value)) -#define MONO_SEM_WAIT(sem) sem_wait ((sem)) -#define MONO_SEM_POST(sem) sem_post ((sem)) -#define MONO_SEM_DESTROY(sem) sem_destroy ((sem)) -#endif +#include /* There doesn't seem to be a defined symbol for this */ #define _WAPI_THREAD_CURRENT (gpointer)0xFFFFFFFE @@ -44,6 +26,8 @@ typedef enum { THREAD_STATE_EXITED } WapiThreadState; +#define INTERRUPTION_REQUESTED_HANDLE (gpointer)0xFFFFFFFE + struct _WapiHandle_thread { guint32 exitstatus; @@ -55,6 +39,13 @@ struct _WapiHandle_thread pthread_t id; GPtrArray *owned_mutexes; gpointer handle; + /* + * Handle this thread waits on. If this is INTERRUPTION_REQUESTED_HANDLE, + * it means the thread is interrupted by another thread, and shouldn't enter + * a wait. + * This also acts as a reference for the handle. + */ + gpointer wait_handle; MonoSemType suspend_sem; guint32 (*start_routine)(gpointer arg); gpointer start_arg;