This is a logic bug where we would only wake up one of the threads that are waiting for the manual MonoOSEvent to be set. This would be a problem only if more than one thread is waiting.
mono_os_mutex_lock (&event->mutex);
if (event->manual) {
- mono_os_event_signal (event, FALSE);
+ mono_os_event_signal (event, TRUE);
} else {
event->set_count = 1;
- mono_os_event_signal (event, TRUE);
+ mono_os_event_signal (event, FALSE);
}
mono_os_mutex_unlock (&event->mutex);