Improve the reliability and error reporting of the TPL Dataflow test suite.
[mono-project.git] / mono / io-layer / thread-private.h
blob1c62618c8128c69712d301a40e178fcc5af648d0
1 /*
2 * thread-private.h: Private definitions for thread handles
4 * Author:
5 * Dick Porter (dick@ximian.com)
7 * (C) 2002 Ximian, Inc.
8 */
10 #ifndef _WAPI_THREAD_PRIVATE_H_
11 #define _WAPI_THREAD_PRIVATE_H_
13 #include <config.h>
14 #include <glib.h>
15 #include <pthread.h>
16 #include <mono/utils/mono-semaphore.h>
18 /* There doesn't seem to be a defined symbol for this */
19 #define _WAPI_THREAD_CURRENT (gpointer)0xFFFFFFFE
20 extern gpointer _wapi_thread_duplicate (void);
22 extern struct _WapiHandleOps _wapi_thread_ops;
24 typedef enum {
25 THREAD_STATE_START,
26 THREAD_STATE_EXITED
27 } WapiThreadState;
29 #define INTERRUPTION_REQUESTED_HANDLE (gpointer)0xFFFFFFFE
31 struct _WapiHandle_thread
33 guint32 exitstatus;
34 WapiThreadState state : 2;
35 guint joined : 1;
36 guint has_apc : 1;
37 guint32 create_flags;
38 /* Fields below this point are only valid for the owning process */
39 pthread_t id;
40 GPtrArray *owned_mutexes;
41 gpointer handle;
42 /*
43 * Handle this thread waits on. If this is INTERRUPTION_REQUESTED_HANDLE,
44 * it means the thread is interrupted by another thread, and shouldn't enter
45 * a wait.
46 * This also acts as a reference for the handle.
48 gpointer wait_handle;
49 MonoSemType suspend_sem;
50 guint32 (*start_routine)(gpointer arg);
51 gpointer start_arg;
54 typedef struct
56 guint32 (*callback)(gpointer arg);
57 gpointer param;
58 } ApcInfo;
60 extern gboolean _wapi_thread_apc_pending (gpointer handle);
61 extern gboolean _wapi_thread_cur_apc_pending (void);
62 extern gboolean _wapi_thread_dispatch_apc_queue (gpointer handle);
63 extern void _wapi_thread_own_mutex (gpointer mutex);
64 extern void _wapi_thread_disown_mutex (gpointer mutex);
65 extern gpointer _wapi_thread_handle_from_id (pthread_t tid);
66 extern void _wapi_thread_set_termination_details (gpointer handle,
67 guint32 exitstatus);
68 extern void _wapi_thread_cleanup (void);
70 #endif /* _WAPI_THREAD_PRIVATE_H_ */