summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--thread_win32.c3
2 files changed, 7 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 9e9cd1cf7a..592fe5cdd1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Thu Dec 31 03:27:53 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread_win32.c (native_thread_destroy): decreased the probability of
+ using the interrupt event in the thread termination.
+ see [ruby-core:27199].
+
Thu Dec 31 02:35:57 2009 NAKAMURA Usaku <usa@ruby-lang.org>
* thread_win32.c (w32_error): should report the function.
diff --git a/thread_win32.c b/thread_win32.c
index 1a7917e518..3cff714e87 100644
--- a/thread_win32.c
+++ b/thread_win32.c
@@ -449,10 +449,9 @@ native_thread_init_stack(rb_thread_t *th)
static void
native_thread_destroy(rb_thread_t *th)
{
- HANDLE intr = th->native_thread_data.interrupt_event;
+ HANDLE intr = InterlockedExchangePointer(&th->native_thread_data.interrupt_event, 0);
native_mutex_destroy(&th->interrupt_lock);
thread_debug("close handle - intr: %p, thid: %p\n", intr, th->thread_id);
- th->native_thread_data.interrupt_event = 0;
w32_close_handle(intr);
}