From b275a99e74f00605832e709d4a3caa4de18e5010 Mon Sep 17 00:00:00 2001 From: akr Date: Sat, 13 Dec 2008 16:40:01 +0000 Subject: * process.c (forked_child): new variable. (before_exec): don't call rb_thread_stop_timer_thread if forked_child. (after_exec): reset forked_child after rb_thread_start_timer_thread. (rb_fork): set forked_child just after fork in child. * ext/pty/pty.c (chfunc): extracted from establishShell. (establishShell): use rb_fork. [ruby-dev:37418] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@20726 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- process.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'process.c') diff --git a/process.c b/process.c index a7fabfc70..e47efe581 100644 --- a/process.c +++ b/process.c @@ -971,10 +971,12 @@ void rb_thread_stop_timer_thread(void); void rb_thread_start_timer_thread(void); void rb_thread_reset_timer_thread(void); +static int forked_child = 0; + #define before_exec() \ - (rb_enable_interrupt(), rb_thread_stop_timer_thread()) + (rb_enable_interrupt(), forked_child ? 0 : rb_thread_stop_timer_thread()) #define after_exec() \ - (rb_thread_start_timer_thread(), rb_disable_interrupt()) + (rb_thread_start_timer_thread(), forked_child = 0, rb_disable_interrupt()) #define before_fork() before_exec() #define after_fork() after_exec() @@ -2415,6 +2417,7 @@ rb_fork(int *status, int (*chfunc)(void*), void *charg, VALUE fds) } } if (!pid) { + forked_child = 1; if (chfunc) { #ifdef FD_CLOEXEC close(ep[0]); -- cgit