Ooops, gen-65 is broken, not test-65.
[mono.git] / mono / io-layer / events.c
index d95be4b0c7b6c6a330d383ad5a5856d650c674fc..c99175dd34224c2e8c9cae062487d8fdd5041036 100644 (file)
@@ -85,7 +85,11 @@ static void event_own (gpointer handle)
 #endif
 
        if(event_handle->manual==FALSE) {
-               _wapi_handle_set_signal_state (handle, FALSE, FALSE);
+               g_assert (event_handle->set_count > 0);
+               
+               if (--event_handle->set_count == 0) {
+                       _wapi_handle_set_signal_state (handle, FALSE, FALSE);
+               }
        }
 }
 
@@ -142,8 +146,13 @@ gpointer CreateEvent(WapiSecurityAttributes *security G_GNUC_UNUSED, gboolean ma
        ret = handle;
        
        event_handle->manual=manual;
+       event_handle->set_count = 0;
 
        if(initial==TRUE) {
+               if (manual == FALSE) {
+                       event_handle->set_count = 1;
+               }
+               
                _wapi_handle_set_signal_state (handle, TRUE, FALSE);
        }
        
@@ -202,6 +211,7 @@ gboolean PulseEvent(gpointer handle)
        if(event_handle->manual==TRUE) {
                _wapi_handle_set_signal_state (handle, TRUE, TRUE);
        } else {
+               event_handle->set_count++;
                _wapi_handle_set_signal_state (handle, TRUE, FALSE);
        }
 
@@ -289,6 +299,8 @@ gboolean ResetEvent(gpointer handle)
                _wapi_handle_set_signal_state (handle, FALSE, FALSE);
        }
        
+       event_handle->set_count = 0;
+       
        thr_ret = _wapi_handle_unlock_handle (handle);
        g_assert (thr_ret == 0);
        
@@ -337,6 +349,7 @@ gboolean SetEvent(gpointer handle)
        if(event_handle->manual==TRUE) {
                _wapi_handle_set_signal_state (handle, TRUE, TRUE);
        } else {
+               event_handle->set_count++;
                _wapi_handle_set_signal_state (handle, TRUE, FALSE);
        }