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