MonoThreadInfoWaitRet mono_thread_info_wait_multiple_handle (MonoThreadHandle **thread_handles, gsize nhandles, MonoOSEvent *background_change_event, gboolean waitall, guint32 timeout, gboolean alertable) { MonoOSEventWaitRet res; MonoOSEvent *thread_events [MONO_OS_EVENT_WAIT_MAXIMUM_OBJECTS]; gint i; g_assert (nhandles <= MONO_OS_EVENT_WAIT_MAXIMUM_OBJECTS); if (background_change_event) g_assert (nhandles <= MONO_OS_EVENT_WAIT_MAXIMUM_OBJECTS - 1); for (i = 0; i < nhandles; ++i) thread_events [i] = &thread_handles [i]->event; if (background_change_event) thread_events [nhandles ++] = background_change_event; res = mono_os_event_wait_multiple (thread_events, nhandles, waitall, timeout); if (res >= MONO_OS_EVENT_WAIT_RET_SUCCESS_0 && res <= MONO_OS_EVENT_WAIT_RET_SUCCESS_0 + nhandles - 1) return MONO_THREAD_INFO_WAIT_RET_SUCCESS_0 + (res - MONO_OS_EVENT_WAIT_RET_SUCCESS_0); else if (res == MONO_OS_EVENT_WAIT_RET_ALERTED) return MONO_THREAD_INFO_WAIT_RET_ALERTED; else if (res == MONO_OS_EVENT_WAIT_RET_TIMEOUT) return MONO_THREAD_INFO_WAIT_RET_TIMEOUT; else g_error ("%s: unknown res value %d", __func__, res); }
MonoOSEventWaitRet mono_os_event_wait_one (MonoOSEvent *event, guint32 timeout, gboolean alertable) { return mono_os_event_wait_multiple (&event, 1, TRUE, timeout, alertable); }