From b873f41c1e577168b6322bd96f38b077b44d5314 Mon Sep 17 00:00:00 2001 From: nagai Date: Wed, 30 Jul 2003 04:36:29 +0000 Subject: * additional check of Tk interpreters' status for a little more safety git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4226 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/tcltklib/tcltklib.c | 2 +- ext/tk/lib/tk.rb | 31 ++++++++++++++++++++++++------- ext/tk/lib/tkafter.rb | 3 ++- ext/tk/sample/safe-tk.rb | 9 +++++---- 4 files changed, 32 insertions(+), 13 deletions(-) diff --git a/ext/tcltklib/tcltklib.c b/ext/tcltklib/tcltklib.c index 12629a423e..ec00cea217 100644 --- a/ext/tcltklib/tcltklib.c +++ b/ext/tcltklib/tcltklib.c @@ -1020,7 +1020,7 @@ ip_invoke_real(argc, argv, obj) /* exception on mainloop */ if (ptr->return_value == TCL_ERROR) { - if (event_loop_abort_on_exc > 0) { + if (event_loop_abort_on_exc > 0 && !Tcl_InterpDeleted(ptr->ip)) { rb_raise(rb_eRuntimeError, "%s", ptr->ip->result); } else { if (event_loop_abort_on_exc < 0) { diff --git a/ext/tk/lib/tk.rb b/ext/tk/lib/tk.rb index 6ee5c36fba..13e41ece44 100644 --- a/ext/tk/lib/tk.rb +++ b/ext/tk/lib/tk.rb @@ -3359,7 +3359,7 @@ class TkObject .w00012 +safe_slave1.eval_proc(cmd, 'safe1') # label -> .w00015 +safe_slave2.eval_proc(cmd, 'safe2') # label -> .w00018 +cmd.call('master') # label -> .w00021 TkTimer.new(2000, -1, proc{p ['safe1', safe_slave1.deleted?]}).start TkTimer.new(2000, -1, proc{p ['safe2', safe_slave2.deleted?]}).start @@ -57,6 +57,7 @@ TkTimer.new(10000, 1, proc{ trusted_slave.eval_proc{Tk.root.destroy} trusted_slave.delete + print "*** The trusted_slave is deleted by the timer.\n" }).start Tk.mainloop -- cgit v1.2.3