X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Futils%2Fos-event-unix.c;h=611cb76ffbc69038a739470bcad367cd6df8102a;hb=d46d59e019fc14bb9dab08a0cc2aa117470d1895;hp=b4a3e2f5afdf8dc083df00f30973be0d2a4349ea;hpb=63aec275452cb37f60e8c74e06ba3b5cb108b280;p=mono.git diff --git a/mono/utils/os-event-unix.c b/mono/utils/os-event-unix.c index b4a3e2f5afd..611cb76ffbc 100644 --- a/mono/utils/os-event-unix.c +++ b/mono/utils/os-event-unix.c @@ -88,9 +88,9 @@ mono_os_event_reset (MonoOSEvent *event) } MonoOSEventWaitRet -mono_os_event_wait_one (MonoOSEvent *event, guint32 timeout, gboolean alertable) +mono_os_event_wait_one (MonoOSEvent *event, guint32 timeout) { - return mono_os_event_wait_multiple (&event, 1, TRUE, timeout, alertable); + return mono_os_event_wait_multiple (&event, 1, TRUE, timeout); } typedef struct { @@ -113,7 +113,7 @@ signal_and_unref (gpointer user_data) } MonoOSEventWaitRet -mono_os_event_wait_multiple (MonoOSEvent **events, gsize nevents, gboolean waitall, guint32 timeout, gboolean alertable) +mono_os_event_wait_multiple (MonoOSEvent **events, gsize nevents, gboolean waitall, guint32 timeout) { MonoOSEventWaitRet ret; mono_cond_t signal_cond; @@ -131,18 +131,16 @@ mono_os_event_wait_multiple (MonoOSEvent **events, gsize nevents, gboolean waita for (i = 0; i < nevents; ++i) g_assert (events [i]); - if (alertable) { - data = g_new0 (OSEventWaitData, 1); - data->ref = 2; - mono_os_event_init (&data->event, FALSE); + data = g_new0 (OSEventWaitData, 1); + data->ref = 2; + mono_os_event_init (&data->event, FALSE); - alerted = FALSE; - mono_thread_info_install_interrupt (signal_and_unref, data, &alerted); - if (alerted) { - mono_os_event_destroy (&data->event); - g_free (data); - return MONO_OS_EVENT_WAIT_RET_ALERTED; - } + alerted = FALSE; + mono_thread_info_install_interrupt (signal_and_unref, data, &alerted); + if (alerted) { + mono_os_event_destroy (&data->event); + g_free (data); + return MONO_OS_EVENT_WAIT_RET_ALERTED; } if (timeout != MONO_INFINITE_WAIT) @@ -155,8 +153,7 @@ mono_os_event_wait_multiple (MonoOSEvent **events, gsize nevents, gboolean waita for (i = 0; i < nevents; ++i) g_ptr_array_add (events [i]->conds, &signal_cond); - if (alertable) - g_ptr_array_add (data->event.conds, &signal_cond); + g_ptr_array_add (data->event.conds, &signal_cond); for (;;) { gint count, lowest; @@ -173,7 +170,7 @@ mono_os_event_wait_multiple (MonoOSEvent **events, gsize nevents, gboolean waita } } - if (alertable && mono_os_event_is_signalled (&data->event)) + if (mono_os_event_is_signalled (&data->event)) signalled = TRUE; else if (waitall) signalled = (count == nevents); @@ -209,26 +206,23 @@ done: for (i = 0; i < nevents; ++i) g_ptr_array_remove (events [i]->conds, &signal_cond); - if (alertable) - g_ptr_array_remove (data->event.conds, &signal_cond); + g_ptr_array_remove (data->event.conds, &signal_cond); mono_os_mutex_unlock (&signal_mutex); mono_os_cond_destroy (&signal_cond); - if (alertable) { - mono_thread_info_uninstall_interrupt (&alerted); - if (alerted) { - if (InterlockedDecrement ((gint32*) &data->ref) == 0) { - mono_os_event_destroy (&data->event); - g_free (data); - } - return MONO_OS_EVENT_WAIT_RET_ALERTED; + mono_thread_info_uninstall_interrupt (&alerted); + if (alerted) { + if (InterlockedDecrement ((gint32*) &data->ref) == 0) { + mono_os_event_destroy (&data->event); + g_free (data); } - - mono_os_event_destroy (&data->event); - g_free (data); + return MONO_OS_EVENT_WAIT_RET_ALERTED; } + mono_os_event_destroy (&data->event); + g_free (data); + return ret; }