Hi, 

From: "Henrik Steensland" <henst374 / student.liu.se>
Subject: TkButton#command problem with threads
Date: Fri, 4 Jun 2004 08:17:27 +0900
Message-ID: <20040603231722.679E921B19 / arcadia.unit.liu.se>
> When running cmd.call i get the printout "a" and "b" quickly. The new Thread
> is just sleeping quietly in the background.
> However, when I push my TkButton, I get the "a", then the whole program
> sleeps for 10 seconds, then I get the "b". So something is really strange
> here. I had no problems with the code above in earlier versions.

Thank you for your report. Please test the following patch.

--- tcltklib.c.old 2004-06-04 10:15:14.000000000 +0900 +++ tcltklib.c 2004-06-04 10:16:17.000000000 +0900 @@ -1008,7 +1008,9 @@ (VALUE)0); #else + rb_thread_critical = Qfalse; ret = rb_eval_string_protect(arg->string, &status); + rb_thread_critical = Qtrue; if (status) { char *errtype, *buf; int errtype_len, len; @@ -1288,9 +1290,13 @@ struct cmd_body_arg *arg; { VALUE ret; + int thr_crit_bup; DUMP1("call ip_ruby_cmd_core"); + thr_crit_bup = rb_thread_critical; + rb_thread_critical = Qfalse; ret = rb_apply(arg->receiver, arg->method, arg->args); + rb_thread_critical = thr_crit_bup; DUMP1("finish ip_ruby_cmd_core"); return ret;
-- Hidetoshi NAGAI (nagai / ai.kyutech.ac.jp)