On 19 Jul 2006, at 8:25, <nobu / ruby-lang.org> <nobu / ruby-lang.org> wrote: > > Solution is to add a call to 'rb_thread_atfork()' in the > > child after fork() in order to kill off those other threads. > > Sounds reasonable. Is it possible to get that fix into 1.8.5? > > On a related theme, it seems like the 'rb_proc_exec' in > > process.c:pipe_open() should be protected with rb_protect or > > similar, to prevent any exceptions raised during > > rb_proc_exec() from being propagated to the soon-to-be-dead > > main thread in the child process. I'm not familiar enough > > with use of rb_protect to provide a proper patch for that. > > The point would be any exceptions must not be raised after > fork. Well, an exception should probably just cause the interpreter to exit. It should not, for example, allow a subsequent exec() syscall to be invoked. > It should be done in 1.9 almost, but it's bad time to > backport that change from trunk now. I wasn't sure from your enclosed attached patches whether they are for 1.8 or 1.9. The process.c patch appeared to be on the ruby_1_8 branch, but io.c patch was on head. Could you explain further, or is there perhaps a web page that explains the process in more detail? Many thanks for your response to my bug report - much appreciated, Jonathan > Index: process.c > =================================================================== > RCS file: /cvs/ruby/src/ruby/process.c,v > retrieving revision 1.92.2.30 > diff -p -U 2 -r1.92.2.30 process.c > --- process.c 18 Jul 2006 05:53:33 -0000 1.92.2.30 > +++ process.c 19 Jul 2006 06:32:44 -0000 > Index: io.c > =================================================================== > RCS file: /cvs/ruby/src/ruby/io.c,v > retrieving revision 1.412 > diff -p -u -2 -r1.412 io.c > --- io.c 3 Jul 2006 01:44:05 -0000 1.412 > +++ io.c 19 Jul 2006 07:11:34 -0000 > @@ -2949,4 +2949,5 @@ popen_exec(void *pp) > int fd; > > + rb_thread_atfork(); > popen_redirect(p); > for (fd = 3; fd < NOFILE; fd++) { > Index: process.c > =================================================================== > RCS file: /cvs/ruby/src/ruby/process.c,v > retrieving revision 1.149 > diff -p -u -2 -r1.149 process.c > --- process.c 18 Jul 2006 14:55:28 -0000 1.149 > +++ process.c 19 Jul 2006 07:22:40 -0000 >