Bug #6629 ยป 0001-io.c-avoid-rb_thread_wait_fd-if-we-may-call-rb_io_wa.patch
io.c | ||
---|---|---|
}
|
||
offset += c;
|
||
if ((n -= c) <= 0) break;
|
||
rb_thread_wait_fd(fptr->fd);
|
||
}
|
||
return len - n;
|
||
}
|
||
... | ... | |
offset += c;
|
||
if ((n -= c) <= 0) break;
|
||
}
|
||
rb_thread_wait_fd(fptr->fd);
|
||
rb_io_check_closed(fptr);
|
||
if (io_fillbuf(fptr) < 0) {
|
||
break;
|
||
... | ... | |
}
|
||
n = fptr->fd;
|
||
/*
|
||
* FIXME: removing rb_thread_wait_fd() here changes sysread semantics
|
||
* on non-blocking IOs. However, it's still currently possible
|
||
* for sysread to raise Errno::EAGAIN if another thread read()s
|
||
* the IO after we return from rb_thread_wait_fd() but before
|
||
* we call read()
|
||
*/
|
||
rb_thread_wait_fd(fptr->fd);
|
||
rb_io_check_closed(fptr);
|
||
io_setstrbuf(&str, ilen);
|
||
... | ... | |
}
|
||
else {
|
||
ssize_t ss;
|
||
rb_thread_wait_fd(stp->src_fd);
|
||
rb_str_resize(buf, buflen);
|
||
ss = maygvl_copy_stream_read(1, stp, RSTRING_PTR(buf), l, off);
|
||
if (ss == -1)
|