2 * wapi-private.h: internal definitions of handles and shared memory layout
5 * Dick Porter (dick@ximian.com)
7 * (C) 2002 Ximian, Inc.
10 #ifndef _WAPI_PRIVATE_H_
11 #define _WAPI_PRIVATE_H_
16 #include <mono/io-layer/handles.h>
17 #include <mono/io-layer/io.h>
18 #include <mono/io-layer/daemon-private.h>
20 /* Shared threads don't seem to work yet */
21 #undef _POSIX_THREAD_PROCESS_SHARED
23 /* Increment this whenever an incompatible change is made to the
24 * shared handle structure.
26 * If this ever reaches 255, we have problems :-(
28 #define _WAPI_HANDLE_VERSION 7
46 WAPI_HANDLE_CAP_WAIT=0x01,
47 WAPI_HANDLE_CAP_SIGNAL=0x02,
48 WAPI_HANDLE_CAP_OWN=0x04,
49 } WapiHandleCapability;
53 void (*close_shared)(gpointer handle);
54 void (*close_private)(gpointer handle);
56 /* SignalObjectAndWait */
57 void (*signal)(gpointer signal);
59 /* Called by WaitForSingleObject and WaitForMultipleObjects,
60 * with the handle locked
62 void (*own_handle)(gpointer handle);
64 /* Called by WaitForSingleObject and WaitForMultipleObjects, if the
65 * handle in question is "ownable" (ie mutexes), to see if the current
66 * thread already owns this handle
68 gboolean (*is_owned)(gpointer handle);
71 #include <mono/io-layer/event-private.h>
72 #include <mono/io-layer/io-private.h>
73 #include <mono/io-layer/mutex-private.h>
74 #include <mono/io-layer/semaphore-private.h>
75 #include <mono/io-layer/socket-private.h>
76 #include <mono/io-layer/thread-private.h>
77 #include <mono/io-layer/process-private.h>
79 struct _WapiHandleShared
84 mono_mutex_t signal_mutex;
85 pthread_cond_t signal_cond;
89 struct _WapiHandle_event event;
90 struct _WapiHandle_file file;
91 struct _WapiHandle_find find;
92 struct _WapiHandle_mutex mutex;
93 struct _WapiHandle_sem sem;
94 struct _WapiHandle_socket sock;
95 struct _WapiHandle_thread thread;
96 struct _WapiHandle_process process;
100 #define _WAPI_MAX_HANDLES 4096
101 #define _WAPI_HANDLE_INVALID (gpointer)-1
104 * This is the layout of the shared memory segment
106 struct _WapiHandleShared_list
108 guchar daemon[MONO_SIZEOF_SUNPATH];
109 _wapi_daemon_status daemon_running;
111 #ifdef _POSIX_THREAD_PROCESS_SHARED
112 mono_mutex_t signal_mutex;
113 pthread_cond_t signal_cond;
115 struct _WapiHandleShared handles[_WAPI_MAX_HANDLES];
116 guchar scratch_base[0];
119 struct _WapiHandlePrivate
123 struct _WapiHandlePrivate_event event;
124 struct _WapiHandlePrivate_file file;
125 struct _WapiHandlePrivate_find find;
126 struct _WapiHandlePrivate_mutex mutex;
127 struct _WapiHandlePrivate_sem sem;
128 struct _WapiHandlePrivate_socket sock;
129 struct _WapiHandlePrivate_thread thread;
130 struct _WapiHandlePrivate_process process;
134 /* Per-process handle info. For lookup convenience, each index matches
135 * the corresponding shared data.
137 struct _WapiHandlePrivate_list
139 #ifndef _POSIX_THREAD_PROCESS_SHARED
140 mono_mutex_t signal_mutex;
141 pthread_cond_t signal_cond;
143 struct _WapiHandlePrivate handles[_WAPI_MAX_HANDLES];
147 #endif /* _WAPI_PRIVATE_H_ */