2006-12-11 Sebastien Pouliot <sebastien@ximian.com>
[mono.git] / mono / io-layer / thread-private.h
index bae837eadce0a228af461b27dfa0dd0b15eee9a3..72ec686c353e46257b20a4d11683de00bb3e5cc3 100644 (file)
 
 #include <config.h>
 #include <glib.h>
+#include <pthread.h>
+#ifdef HAVE_SEMAPHORE_H
+#include <semaphore.h>
+#endif
+#ifdef USE_MACH_SEMA
+#include <mach/mach_init.h>
+#include <mach/task.h>
+#include <mach/semaphore.h>
+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 <mono/io-layer/timed-thread.h>
+/* There doesn't seem to be a defined symbol for this */
+#define _WAPI_THREAD_CURRENT (gpointer)0xFFFFFFFE
+extern gpointer _wapi_thread_duplicate (void);
 
 extern struct _WapiHandleOps _wapi_thread_ops;
 
@@ -27,13 +49,31 @@ struct _WapiHandle_thread
        WapiThreadState state;
        guint32 exitstatus;
        pid_t owner_pid;
-       TimedThread *thread;
        gboolean joined;
+       guint32 create_flags;
+       /* Fields below this point are only valid for the owning process */
+       pthread_t id;
+       GPtrArray *owned_mutexes;
+       gpointer handle;
+       MonoSemType suspend_sem;
+       guint32 (*start_routine)(gpointer arg);
+       gpointer start_arg;
+       GSList *apc_queue;
 };
 
+typedef struct
+{
+       guint32 (*callback)(gpointer arg);
+       gpointer param;
+} ApcInfo;
+
 extern gboolean _wapi_thread_apc_pending (gpointer handle);
 extern gboolean _wapi_thread_cur_apc_pending (void);
 extern gboolean _wapi_thread_dispatch_apc_queue (gpointer handle);
-
+extern void _wapi_thread_own_mutex (gpointer mutex);
+extern void _wapi_thread_disown_mutex (gpointer mutex);
+extern gpointer _wapi_thread_handle_from_id (pthread_t tid);
+extern void _wapi_thread_set_termination_details (gpointer handle,
+                                                 guint32 exitstatus);
 
 #endif /* _WAPI_THREAD_PRIVATE_H_ */