summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-12-30 18:30:36 +0000
committerusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-12-30 18:30:36 +0000
commit9f90682c4b60bf9788b94ccb107ac6b8a5cc5f7e (patch)
treee4855d9f2e2b103eb07ae99fb84e78e005fb6275
parent5bc85d62649d3484cab1adca0edbc514fa92aa6d (diff)
* thread_win32.c (native_thread_destroy): decreased the probability of
using the interrupt event in the thread termination. see [ruby-core:27199]. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26207 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-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);
}