- MonoOSEventWaitRet ret;
- gint64 start;
-
- g_assert (mono_lazy_is_initialized (&status));
-
- g_assert (event);
-
- mono_os_mutex_lock (&event->mutex);
-
- if (timeout != MONO_INFINITE_WAIT)
- start = mono_msec_ticks ();
-
- for (;;) {
- if (mono_os_event_own (event)) {
- ret = MONO_OS_EVENT_WAIT_RET_SUCCESS_0;
- goto done;
- }
-
- if (timeout == MONO_INFINITE_WAIT) {
- mono_os_cond_wait (&event->cond, &event->mutex);
- } else {
- gint64 elapsed;
- gint res;
-
- elapsed = mono_msec_ticks () - start;
- if (elapsed >= timeout) {
- ret = MONO_OS_EVENT_WAIT_RET_TIMEOUT;
- goto done;
- }
-
- res = mono_os_cond_timedwait (&event->cond, &event->mutex, timeout - elapsed);
- if (res != 0) {
- ret = MONO_OS_EVENT_WAIT_RET_TIMEOUT;
- goto done;
- }
- }
- }
-
-done:
- mono_os_mutex_unlock (&event->mutex);
-
- return ret;
+ return mono_os_event_wait_multiple (&event, 1, TRUE, timeout, alertable);