* 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
This commit is contained in:
parent
0031967d20
commit
80843ea156
@ -1,3 +1,10 @@
|
|||||||
|
Thu Sep 4 20:57:54 2008 Koichi Sasada <ko1@atdot.net>
|
||||||
|
|
||||||
|
* 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 <akr@fsij.org>
|
Thu Sep 4 20:30:24 2008 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
* transcode_data.h (PType): defined unconditionaly.
|
* transcode_data.h (PType): defined unconditionaly.
|
||||||
|
@ -8,11 +8,6 @@
|
|||||||
|
|
||||||
#include "ruby.h"
|
#include "ruby.h"
|
||||||
|
|
||||||
#ifdef HAVE_RUBY_SIGNAL_H
|
|
||||||
#include "ruby/signal.h"
|
|
||||||
#else
|
|
||||||
#include "rubysig.h"
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_RUBY_ENCODING_H
|
#ifdef HAVE_RUBY_ENCODING_H
|
||||||
#include "ruby/encoding.h"
|
#include "ruby/encoding.h"
|
||||||
#endif
|
#endif
|
||||||
@ -54,6 +49,9 @@
|
|||||||
#define TCL_FINAL_RELEASE 2
|
#define TCL_FINAL_RELEASE 2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static VALUE rb_thread_critical; /* dummy */
|
||||||
|
int rb_thread_check_trap_pending();
|
||||||
|
|
||||||
static struct {
|
static struct {
|
||||||
int major;
|
int major;
|
||||||
int minor;
|
int minor;
|
||||||
@ -1623,6 +1621,28 @@ get_thread_alone_check_flag()
|
|||||||
}
|
}
|
||||||
#endif
|
#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
|
static int
|
||||||
lib_eventloop_core(check_root, update_flag, check_var, interp)
|
lib_eventloop_core(check_root, update_flag, check_var, interp)
|
||||||
int check_root;
|
int check_root;
|
||||||
@ -1755,28 +1775,12 @@ lib_eventloop_core(check_root, update_flag, check_var, interp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DUMP1("trap check");
|
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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DUMP1("check Root Widget");
|
DUMP1("check Root Widget");
|
||||||
if (check_root && tk_stubs_init_p() && Tk_GetNumMainWindows() == 0) {
|
if (check_root && tk_stubs_init_p() && Tk_GetNumMainWindows() == 0) {
|
||||||
run_timer_flag = 0;
|
run_timer_flag = 0;
|
||||||
if (rb_trap_pending) {
|
TRAP_CHECK();
|
||||||
if (rb_prohibit_interrupt || check_var != (int*)NULL) {
|
|
||||||
/* pending or on wait command */
|
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
rb_trap_exec();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1886,16 +1890,7 @@ lib_eventloop_core(check_root, update_flag, check_var, interp)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
DUMP1("trap check");
|
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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (check_var != (int*)NULL
|
if (check_var != (int*)NULL
|
||||||
&& !NIL_P(rbtk_pending_exception)) {
|
&& !NIL_P(rbtk_pending_exception)) {
|
||||||
@ -1966,28 +1961,12 @@ lib_eventloop_core(check_root, update_flag, check_var, interp)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
DUMP1("trap check");
|
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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DUMP1("check Root Widget");
|
DUMP1("check Root Widget");
|
||||||
if (check_root && tk_stubs_init_p() && Tk_GetNumMainWindows() == 0) {
|
if (check_root && tk_stubs_init_p() && Tk_GetNumMainWindows() == 0) {
|
||||||
run_timer_flag = 0;
|
run_timer_flag = 0;
|
||||||
if (rb_trap_pending) {
|
TRAP_CHECK();
|
||||||
if (rb_prohibit_interrupt || check_var != (int*)NULL) {
|
|
||||||
/* pending or on wait command */
|
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
rb_trap_exec();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2823,7 +2802,6 @@ tcl_protect(interp, proc, data)
|
|||||||
VALUE (*proc)();
|
VALUE (*proc)();
|
||||||
VALUE data;
|
VALUE data;
|
||||||
{
|
{
|
||||||
int old_trapflag = rb_trap_immediate;
|
|
||||||
int code;
|
int code;
|
||||||
|
|
||||||
#ifdef HAVE_NATIVETHREAD
|
#ifdef HAVE_NATIVETHREAD
|
||||||
@ -2834,10 +2812,7 @@ tcl_protect(interp, proc, data)
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
rb_trap_immediate = 0;
|
|
||||||
code = tcl_protect_core(interp, proc, data);
|
code = tcl_protect_core(interp, proc, data);
|
||||||
rb_trap_immediate = old_trapflag;
|
|
||||||
|
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3404,7 +3379,7 @@ ip_rbUpdateCommand(clientData, interp, objc, objv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* trap check */
|
/* trap check */
|
||||||
if (rb_trap_pending) {
|
if (rb_thread_check_trap_pending()) {
|
||||||
Tcl_Release(interp);
|
Tcl_Release(interp);
|
||||||
|
|
||||||
return TCL_RETURN;
|
return TCL_RETURN;
|
||||||
@ -3770,7 +3745,7 @@ ip_rbVwaitCommand(clientData, interp, objc, objv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* trap check */
|
/* trap check */
|
||||||
if (rb_trap_pending) {
|
if (rb_thread_check_trap_pending()) {
|
||||||
#if TCL_MAJOR_VERSION >= 8
|
#if TCL_MAJOR_VERSION >= 8
|
||||||
Tcl_DecrRefCount(objv[1]);
|
Tcl_DecrRefCount(objv[1]);
|
||||||
#endif
|
#endif
|
||||||
@ -4059,7 +4034,7 @@ ip_rbTkWaitCommand(clientData, interp, objc, objv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* trap check */
|
/* trap check */
|
||||||
if (rb_trap_pending) {
|
if (rb_thread_check_trap_pending()) {
|
||||||
Tcl_Release(interp);
|
Tcl_Release(interp);
|
||||||
|
|
||||||
return TCL_RETURN;
|
return TCL_RETURN;
|
||||||
@ -4119,7 +4094,7 @@ ip_rbTkWaitCommand(clientData, interp, objc, objv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* trap check */
|
/* trap check */
|
||||||
if (rb_trap_pending) {
|
if (rb_thread_check_trap_pending()) {
|
||||||
#if TCL_MAJOR_VERSION >= 8
|
#if TCL_MAJOR_VERSION >= 8
|
||||||
Tcl_DecrRefCount(objv[2]);
|
Tcl_DecrRefCount(objv[2]);
|
||||||
#endif
|
#endif
|
||||||
@ -4214,7 +4189,7 @@ ip_rbTkWaitCommand(clientData, interp, objc, objv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* trap check */
|
/* trap check */
|
||||||
if (rb_trap_pending) {
|
if (rb_thread_check_trap_pending()) {
|
||||||
Tcl_Release(interp);
|
Tcl_Release(interp);
|
||||||
|
|
||||||
return TCL_RETURN;
|
return TCL_RETURN;
|
||||||
|
@ -11,11 +11,6 @@
|
|||||||
|
|
||||||
#include "ruby.h"
|
#include "ruby.h"
|
||||||
|
|
||||||
#ifdef HAVE_RUBY_SIGNAL_H
|
|
||||||
#include "ruby/signal.h"
|
|
||||||
#else
|
|
||||||
#include "rubysig.h"
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_RUBY_ST_H
|
#ifdef HAVE_RUBY_ST_H
|
||||||
#include "ruby/st.h"
|
#include "ruby/st.h"
|
||||||
#else
|
#else
|
||||||
@ -895,15 +890,12 @@ tk_conv_args(argc, argv, self)
|
|||||||
{
|
{
|
||||||
int idx, size;
|
int idx, size;
|
||||||
volatile VALUE dst;
|
volatile VALUE dst;
|
||||||
int thr_crit_bup;
|
|
||||||
VALUE old_gc;
|
VALUE old_gc;
|
||||||
|
|
||||||
if (argc < 2) {
|
if (argc < 2) {
|
||||||
rb_raise(rb_eArgError, "too few arguments");
|
rb_raise(rb_eArgError, "too few arguments");
|
||||||
}
|
}
|
||||||
|
|
||||||
thr_crit_bup = rb_thread_critical;
|
|
||||||
rb_thread_critical = Qtrue;
|
|
||||||
old_gc = rb_gc_disable();
|
old_gc = rb_gc_disable();
|
||||||
|
|
||||||
for(size = 0, idx = 2; idx < argc; idx++) {
|
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();
|
if (old_gc == Qfalse) rb_gc_enable();
|
||||||
rb_thread_critical = thr_crit_bup;
|
|
||||||
|
|
||||||
return rb_ary_plus(argv[0], dst);
|
return rb_ary_plus(argv[0], dst);
|
||||||
}
|
}
|
||||||
@ -1599,12 +1590,8 @@ cbsubst_scan_args(self, arg_key, val_ary)
|
|||||||
unsigned char type_chr;
|
unsigned char type_chr;
|
||||||
volatile VALUE dst = rb_ary_new2(vallen);
|
volatile VALUE dst = rb_ary_new2(vallen);
|
||||||
volatile VALUE proc;
|
volatile VALUE proc;
|
||||||
int thr_crit_bup;
|
|
||||||
VALUE old_gc;
|
VALUE old_gc;
|
||||||
|
|
||||||
thr_crit_bup = rb_thread_critical;
|
|
||||||
rb_thread_critical = Qtrue;
|
|
||||||
|
|
||||||
old_gc = rb_gc_disable();
|
old_gc = rb_gc_disable();
|
||||||
|
|
||||||
Data_Get_Struct(rb_const_get(self, ID_SUBST_INFO),
|
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();
|
if (old_gc == Qfalse) rb_gc_enable();
|
||||||
rb_thread_critical = thr_crit_bup;
|
|
||||||
|
|
||||||
return dst;
|
return dst;
|
||||||
}
|
}
|
||||||
|
10
thread.c
10
thread.c
@ -890,6 +890,16 @@ rb_thread_check_ints(void)
|
|||||||
RUBY_VM_CHECK_INTS();
|
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();
|
struct timeval rb_time_timeval();
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
x
Reference in New Issue
Block a user