From 80843ea156b7b2849b1fcc9764e85f70811cdd89 Mon Sep 17 00:00:00 2001 From: ko1 Date: Thu, 4 Sep 2008 12:00:24 +0000 Subject: * thread.c (rb_thread_check_trap_pending): added for compatibility. * ext/tk/tcltklib.c, ext/tk/tkutil/tkutil.c: remove ruby/signal.h dependency. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19128 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 ++++ ext/tk/tcltklib.c | 97 +++++++++++++++++++------------------------------- ext/tk/tkutil/tkutil.c | 14 -------- thread.c | 10 ++++++ 4 files changed, 53 insertions(+), 75 deletions(-) diff --git a/ChangeLog b/ChangeLog index d82554bbaf..9971814a11 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Thu Sep 4 20:57:54 2008 Koichi Sasada + + * thread.c (rb_thread_check_trap_pending): added for compatibility. + + * ext/tk/tcltklib.c, ext/tk/tkutil/tkutil.c: remove ruby/signal.h + dependency. + Thu Sep 4 20:30:24 2008 Tanaka Akira * transcode_data.h (PType): defined unconditionaly. diff --git a/ext/tk/tcltklib.c b/ext/tk/tcltklib.c index 70894269ec..1946272340 100644 --- a/ext/tk/tcltklib.c +++ b/ext/tk/tcltklib.c @@ -8,11 +8,6 @@ #include "ruby.h" -#ifdef HAVE_RUBY_SIGNAL_H -#include "ruby/signal.h" -#else -#include "rubysig.h" -#endif #ifdef HAVE_RUBY_ENCODING_H #include "ruby/encoding.h" #endif @@ -54,6 +49,9 @@ #define TCL_FINAL_RELEASE 2 #endif +static VALUE rb_thread_critical; /* dummy */ +int rb_thread_check_trap_pending(); + static struct { int major; int minor; @@ -1623,6 +1621,28 @@ get_thread_alone_check_flag() } #endif +#define TRAP_CHECK() do { \ + if (trap_check(check_var) == 0) return 0; \ +} while (0) + +static int +trap_check(int *check_var) +{ + DUMP1("trap check"); + + if (rb_thread_check_trap_pending()) { + if (check_var != (int*)NULL) { + /* wait command */ + return 0; + } + else { + rb_thread_check_ints(); + } + } + + return 1; +} + static int lib_eventloop_core(check_root, update_flag, check_var, interp) int check_root; @@ -1755,28 +1775,12 @@ lib_eventloop_core(check_root, update_flag, check_var, interp) } } - DUMP1("trap check"); - if (rb_trap_pending) { - run_timer_flag = 0; - if (rb_prohibit_interrupt || check_var != (int*)NULL) { - /* pending or on wait command */ - return 0; - } else { - rb_trap_exec(); - } - } + TRAP_CHECK(); - DUMP1("check Root Widget"); + DUMP1("check Root Widget"); if (check_root && tk_stubs_init_p() && Tk_GetNumMainWindows() == 0) { run_timer_flag = 0; - if (rb_trap_pending) { - if (rb_prohibit_interrupt || check_var != (int*)NULL) { - /* pending or on wait command */ - return 0; - } else { - rb_trap_exec(); - } - } + TRAP_CHECK(); return 1; } @@ -1886,16 +1890,7 @@ lib_eventloop_core(check_root, update_flag, check_var, interp) return 0; } - DUMP1("trap check"); - if (rb_trap_pending) { - run_timer_flag = 0; - if (rb_prohibit_interrupt || check_var != (int*)NULL) { - /* pending or on wait command */ - return 0; - } else { - rb_trap_exec(); - } - } + TRAP_CHECK(); if (check_var != (int*)NULL && !NIL_P(rbtk_pending_exception)) { @@ -1966,28 +1961,12 @@ lib_eventloop_core(check_root, update_flag, check_var, interp) return 1; } - DUMP1("trap check"); - if (rb_trap_pending) { - run_timer_flag = 0; - if (rb_prohibit_interrupt || check_var != (int*)NULL) { - /* pending or on wait command */ - return 0; - } else { - rb_trap_exec(); - } - } + TRAP_CHECK(); DUMP1("check Root Widget"); if (check_root && tk_stubs_init_p() && Tk_GetNumMainWindows() == 0) { run_timer_flag = 0; - if (rb_trap_pending) { - if (rb_prohibit_interrupt || check_var != (int*)NULL) { - /* pending or on wait command */ - return 0; - } else { - rb_trap_exec(); - } - } + TRAP_CHECK(); return 1; } @@ -2823,7 +2802,6 @@ tcl_protect(interp, proc, data) VALUE (*proc)(); VALUE data; { - int old_trapflag = rb_trap_immediate; int code; #ifdef HAVE_NATIVETHREAD @@ -2834,10 +2812,7 @@ tcl_protect(interp, proc, data) #endif #endif - rb_trap_immediate = 0; code = tcl_protect_core(interp, proc, data); - rb_trap_immediate = old_trapflag; - return code; } @@ -3404,7 +3379,7 @@ ip_rbUpdateCommand(clientData, interp, objc, objv) } /* trap check */ - if (rb_trap_pending) { + if (rb_thread_check_trap_pending()) { Tcl_Release(interp); return TCL_RETURN; @@ -3770,7 +3745,7 @@ ip_rbVwaitCommand(clientData, interp, objc, objv) } /* trap check */ - if (rb_trap_pending) { + if (rb_thread_check_trap_pending()) { #if TCL_MAJOR_VERSION >= 8 Tcl_DecrRefCount(objv[1]); #endif @@ -4059,7 +4034,7 @@ ip_rbTkWaitCommand(clientData, interp, objc, objv) } /* trap check */ - if (rb_trap_pending) { + if (rb_thread_check_trap_pending()) { Tcl_Release(interp); return TCL_RETURN; @@ -4119,7 +4094,7 @@ ip_rbTkWaitCommand(clientData, interp, objc, objv) } /* trap check */ - if (rb_trap_pending) { + if (rb_thread_check_trap_pending()) { #if TCL_MAJOR_VERSION >= 8 Tcl_DecrRefCount(objv[2]); #endif @@ -4214,7 +4189,7 @@ ip_rbTkWaitCommand(clientData, interp, objc, objv) } /* trap check */ - if (rb_trap_pending) { + if (rb_thread_check_trap_pending()) { Tcl_Release(interp); return TCL_RETURN; diff --git a/ext/tk/tkutil/tkutil.c b/ext/tk/tkutil/tkutil.c index 8155bff5ce..42c9330766 100644 --- a/ext/tk/tkutil/tkutil.c +++ b/ext/tk/tkutil/tkutil.c @@ -11,11 +11,6 @@ #include "ruby.h" -#ifdef HAVE_RUBY_SIGNAL_H -#include "ruby/signal.h" -#else -#include "rubysig.h" -#endif #ifdef HAVE_RUBY_ST_H #include "ruby/st.h" #else @@ -895,15 +890,12 @@ tk_conv_args(argc, argv, self) { int idx, size; volatile VALUE dst; - int thr_crit_bup; VALUE old_gc; if (argc < 2) { rb_raise(rb_eArgError, "too few arguments"); } - thr_crit_bup = rb_thread_critical; - rb_thread_critical = Qtrue; old_gc = rb_gc_disable(); for(size = 0, idx = 2; idx < argc; idx++) { @@ -928,7 +920,6 @@ tk_conv_args(argc, argv, self) } if (old_gc == Qfalse) rb_gc_enable(); - rb_thread_critical = thr_crit_bup; return rb_ary_plus(argv[0], dst); } @@ -1599,12 +1590,8 @@ cbsubst_scan_args(self, arg_key, val_ary) unsigned char type_chr; volatile VALUE dst = rb_ary_new2(vallen); volatile VALUE proc; - int thr_crit_bup; VALUE old_gc; - thr_crit_bup = rb_thread_critical; - rb_thread_critical = Qtrue; - old_gc = rb_gc_disable(); Data_Get_Struct(rb_const_get(self, ID_SUBST_INFO), @@ -1632,7 +1619,6 @@ cbsubst_scan_args(self, arg_key, val_ary) } if (old_gc == Qfalse) rb_gc_enable(); - rb_thread_critical = thr_crit_bup; return dst; } diff --git a/thread.c b/thread.c index 268b58e7cd..c2227d8297 100644 --- a/thread.c +++ b/thread.c @@ -890,6 +890,16 @@ rb_thread_check_ints(void) RUBY_VM_CHECK_INTS(); } +/* + * Hidden API for tcl/tk wrapper. + * There is no guarantee to perpetuate it. + */ +int +rb_thread_check_trap_pending(void) +{ + return GET_THREAD()->exec_signal != 0; +} + struct timeval rb_time_timeval(); void -- cgit v1.2.3