aboutsummaryrefslogtreecommitdiffstats
path: root/process.c
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-06-08 13:43:48 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-06-08 13:43:48 +0000
commit373a7d1a9552428d65b7f81527c77a5837410746 (patch)
tree5e296d277b93f2ab5cca2fc0933aabfe1998a590 /process.c
parentc17c8ebb1467cc78028cf2794f666d7493f46caf (diff)
downloadruby-373a7d1a9552428d65b7f81527c77a5837410746.tar.gz
* process.c (rb_fork_err): revert r35955. The condition needs !chfunc
to close ep[0] and ep[1]. The catched exception is re-raised immediately after that if status is not NULL. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35964 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'process.c')
-rw-r--r--process.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/process.c b/process.c
index 0cb47228e2..b1ad91e65d 100644
--- a/process.c
+++ b/process.c
@@ -2783,13 +2783,13 @@ rb_fork_err(int *status, int (*chfunc)(void*, char *, size_t), void *charg, VALU
#if defined(EWOULDBLOCK) && EWOULDBLOCK != EAGAIN
case EWOULDBLOCK:
#endif
- if (!status) {
+ if (!status && !chfunc) {
rb_thread_sleep(1);
continue;
}
else {
rb_protect((VALUE (*)())rb_thread_sleep, 1, &state);
- *status = state;
+ if (status) *status = state;
if (!state) continue;
}
default: