Skip to content

Commit 8f9c7e2

Browse files
charliesomeCharlie Somerville
authored andcommitted
* process.c (recv_child_error): Fix deadlock in rb_fork_internal when a
signal is sent to the parent process while Ruby is forking in IO.popen. Patch by Scott Francis. Closes rubyGH-513. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44687 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1 parent 190d1bf commit 8f9c7e2

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

process.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3339,8 +3339,11 @@ recv_child_error(int fd, int *statep, VALUE *excp, int *errp, char *errmsg, size
33393339
}
33403340
#define READ_FROM_CHILD(ptr, len) \
33413341
(NIL_P(io) ? read(fd, (ptr), (len)) : rb_io_bufread(io, (ptr), (len)))
3342-
if ((size = READ_FROM_CHILD(&err, sizeof(err))) < 0) {
3342+
while ((size = READ_FROM_CHILD(&err, sizeof(err))) < 0) {
33433343
err = errno;
3344+
if (err != EINTR) {
3345+
break;
3346+
}
33443347
}
33453348
*errp = err;
33463349
if (size == sizeof(err) &&

0 commit comments

Comments
 (0)