Merge pull request #1514 from directhex/master
[mono.git] / mono / metadata / threadpool-internals.h
1 #ifndef _MONO_THREADPOOL_INTERNALS_H_
2 #define _MONO_THREADPOOL_INTERNALS_H_
3
4 #include <glib.h>
5 #include <mono/metadata/object.h>
6 #include <mono/metadata/mono-hash.h>
7 #include <mono/metadata/mono-mlist.h>
8 #include <mono/utils/mono-compiler.h>
9 #include <mono/utils/mono-mutex.h>
10
11 typedef struct {
12         mono_mutex_t io_lock; /* access to sock_to_state */
13         int inited; // 0 -> not initialized , 1->initializing, 2->initialized, 3->cleaned up
14         MonoGHashTable *sock_to_state;
15
16         gint event_system;
17         gpointer event_data;
18         void (*modify) (gpointer p, int fd, int operation, int events, gboolean is_new);
19         void (*wait) (gpointer sock_data);
20         void (*shutdown) (gpointer event_data);
21 } SocketIOData;
22
23 void mono_thread_pool_remove_socket (int sock) MONO_INTERNAL;
24 gboolean mono_thread_pool_is_queue_array (MonoArray *o) MONO_INTERNAL;
25 void mono_internal_thread_unhandled_exception (MonoObject* exc) MONO_INTERNAL;
26
27 //TP implementations
28 gpointer tp_poll_init (SocketIOData *data) MONO_INTERNAL;
29
30 //TP internals the impls use
31 void check_for_interruption_critical (void) MONO_INTERNAL;
32 void socket_io_cleanup (SocketIOData *data) MONO_INTERNAL;
33 MonoObject *get_io_event (MonoMList **list, gint event) MONO_INTERNAL;
34 int get_events_from_list (MonoMList *list) MONO_INTERNAL;
35 void threadpool_append_async_io_jobs (MonoObject **jobs, gint njobs) MONO_INTERNAL;
36
37 #endif