summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--ext/tk/tcltklib.c41
-rw-r--r--version.h2
3 files changed, 34 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index 309c7a1cf6..faceccbbfc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sat Dec 16 04:02:10 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/tcltklib.c: shouldn't run the killed thread at callback.
+ [ruby-talk: 227408]
+
Fri Dec 15 17:21:14 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
* lib/rdoc/ri/ri_options.rb: prevent NameError. [ruby-dev:29597]
diff --git a/ext/tk/tcltklib.c b/ext/tk/tcltklib.c
index 9a6449adc6..10b79f2970 100644
--- a/ext/tk/tcltklib.c
+++ b/ext/tk/tcltklib.c
@@ -4,7 +4,7 @@
* Oct. 24, 1997 Y. Matsumoto
*/
-#define TCLTKLIB_RELEASE_DATE "2006-07-10"
+#define TCLTKLIB_RELEASE_DATE "2006-12-01"
#include "ruby.h"
#include "rubysig.h"
@@ -5526,10 +5526,15 @@ call_queue_handler(evPtr, flags)
*(q->done) = -1;
/* back to caller */
- DUMP2("back to caller (caller thread:%lx)", q->thread);
- DUMP2(" (current thread:%lx)", rb_thread_current());
- rb_thread_run(q->thread);
- DUMP1("finish back to caller");
+ if (RTEST(rb_funcall(q->thread, ID_alive_p, 0, 0))) {
+ DUMP2("back to caller (caller thread:%lx)", q->thread);
+ DUMP2(" (current thread:%lx)", rb_thread_current());
+ rb_thread_run(q->thread);
+ DUMP1("finish back to caller");
+ } else {
+ DUMP2("caller is dead (caller thread:%lx)", q->thread);
+ DUMP2(" (current thread:%lx)", rb_thread_current());
+ }
/* end of handler : remove it */
return 1;
@@ -5844,10 +5849,15 @@ eval_queue_handler(evPtr, flags)
*(q->done) = -1;
/* back to caller */
- DUMP2("back to caller (caller thread:%lx)", q->thread);
- DUMP2(" (current thread:%lx)", rb_thread_current());
- rb_thread_run(q->thread);
- DUMP1("finish back to caller");
+ if (RTEST(rb_funcall(q->thread, ID_alive_p, 0, 0))) {
+ DUMP2("back to caller (caller thread:%lx)", q->thread);
+ DUMP2(" (current thread:%lx)", rb_thread_current());
+ rb_thread_run(q->thread);
+ DUMP1("finish back to caller");
+ } else {
+ DUMP2("caller is dead (caller thread:%lx)", q->thread);
+ DUMP2(" (current thread:%lx)", rb_thread_current());
+ }
/* end of handler : remove it */
return 1;
@@ -6921,10 +6931,15 @@ invoke_queue_handler(evPtr, flags)
*(q->done) = -1;
/* back to caller */
- DUMP2("back to caller (caller thread:%lx)", q->thread);
- DUMP2(" (current thread:%lx)", rb_thread_current());
- rb_thread_run(q->thread);
- DUMP1("finish back to caller");
+ if (RTEST(rb_funcall(q->thread, ID_alive_p, 0, 0))) {
+ DUMP2("back to caller (caller thread:%lx)", q->thread);
+ DUMP2(" (current thread:%lx)", rb_thread_current());
+ rb_thread_run(q->thread);
+ DUMP1("finish back to caller");
+ } else {
+ DUMP2("caller is dead (caller thread:%lx)", q->thread);
+ DUMP2(" (current thread:%lx)", rb_thread_current());
+ }
/* end of handler : remove it */
return 1;
diff --git a/version.h b/version.h
index adc3d92194..de9895196f 100644
--- a/version.h
+++ b/version.h
@@ -2,7 +2,7 @@
#define RUBY_RELEASE_DATE "2006-12-16"
#define RUBY_VERSION_CODE 185
#define RUBY_RELEASE_CODE 20061216
-#define RUBY_PATCHLEVEL 10
+#define RUBY_PATCHLEVEL 11
#define RUBY_VERSION_MAJOR 1
#define RUBY_VERSION_MINOR 8