From b245a18e4581d66ef8997a0e51e564818c939ea2 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 20 Mar 2007 00:12:51 +0000 Subject: * process.c (rb_fork): flush stdouts always before fork(2). fixed: [ruby-dev:30612] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@12103 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- process.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'process.c') diff --git a/process.c b/process.c index 98a65b043..c6caf5f7f 100644 --- a/process.c +++ b/process.c @@ -1343,10 +1343,16 @@ rb_fork(int *status, int (*chfunc)(void*), void *charg) #endif #ifndef __VMS - rb_io_flush(rb_stdout); - rb_io_flush(rb_stderr); +#define prefork() ( \ + rb_io_flush(rb_stdout), \ + rb_io_flush(rb_stderr) \ + ) +#else +#define prefork() ((void)0) #endif + prefork(); + #ifdef FD_CLOEXEC if (chfunc) { if (pipe(ep)) return -1; @@ -1356,7 +1362,7 @@ rb_fork(int *status, int (*chfunc)(void*), void *charg) } } #endif - while ((pid = fork()) < 0) { + for (; (pid = fork()) < 0; prefork()) { switch (errno) { case EAGAIN: #if defined(EWOULDBLOCK) && EWOULDBLOCK != EAGAIN -- cgit