mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
use rb_gc_for_fd for more callers
* dir.c (dir_initialize): use rb_gc_for_fd for ENOMEM * ext/socket/init.c (rsock_socket): ditto * ext/socket/socket.c (rsock_socketpair): ditto * internal.h (rb_gc_for_fd): prototype * io.c (rb_gc_for_fd): remove static [ruby-core:71623] [Feature #11727] Manpages for opendir(2), socket(2), and socketpair(3posix) describe ENOMEM as a possible error for each of these; handle it consistently with our existing wrappers for open(2)/pipe(2) etc... git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52726 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
a936bd5c63
commit
61e5fe0674
6 changed files with 14 additions and 7 deletions
|
@ -1,3 +1,12 @@
|
|||
Tue Nov 24 07:50:15 2015 Eric Wong <e@80x24.org>
|
||||
|
||||
* dir.c (dir_initialize): use rb_gc_for_fd for ENOMEM
|
||||
* ext/socket/init.c (rsock_socket): ditto
|
||||
* ext/socket/socket.c (rsock_socketpair): ditto
|
||||
* internal.h (rb_gc_for_fd): prototype
|
||||
* io.c (rb_gc_for_fd): remove static
|
||||
[ruby-core:71623] [Feature #11727]
|
||||
|
||||
Tue Nov 24 06:46:27 2015 Eric Wong <e@80x24.org>
|
||||
|
||||
* io.c (rb_gc_for_fd): new helper function
|
||||
|
|
3
dir.c
3
dir.c
|
@ -519,8 +519,7 @@ dir_initialize(int argc, VALUE *argv, VALUE dir)
|
|||
path = RSTRING_PTR(dirname);
|
||||
dp->dir = opendir(path);
|
||||
if (dp->dir == NULL) {
|
||||
if (errno == EMFILE || errno == ENFILE) {
|
||||
rb_gc();
|
||||
if (rb_gc_for_fd(errno)) {
|
||||
dp->dir = opendir(path);
|
||||
}
|
||||
#ifdef HAVE_GETATTRLIST
|
||||
|
|
|
@ -358,8 +358,7 @@ rsock_socket(int domain, int type, int proto)
|
|||
|
||||
fd = rsock_socket0(domain, type, proto);
|
||||
if (fd < 0) {
|
||||
if (errno == EMFILE || errno == ENFILE) {
|
||||
rb_gc();
|
||||
if (rb_gc_for_fd(errno)) {
|
||||
fd = rsock_socket0(domain, type, proto);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -241,8 +241,7 @@ rsock_socketpair(int domain, int type, int protocol, int sv[2])
|
|||
int ret;
|
||||
|
||||
ret = rsock_socketpair0(domain, type, protocol, sv);
|
||||
if (ret < 0 && (errno == EMFILE || errno == ENFILE)) {
|
||||
rb_gc();
|
||||
if (ret < 0 && rb_gc_for_fd(errno)) {
|
||||
ret = rsock_socketpair0(domain, type, protocol, sv);
|
||||
}
|
||||
|
||||
|
|
|
@ -851,6 +851,7 @@ void rb_stdio_set_default_encoding(void);
|
|||
void rb_write_error_str(VALUE mesg);
|
||||
VALUE rb_io_flush_raw(VALUE, int);
|
||||
size_t rb_io_memsize(const rb_io_t *);
|
||||
int rb_gc_for_fd(int err);
|
||||
|
||||
/* load.c */
|
||||
VALUE rb_get_load_path(void);
|
||||
|
|
2
io.c
2
io.c
|
@ -884,7 +884,7 @@ rb_io_read_check(rb_io_t *fptr)
|
|||
return;
|
||||
}
|
||||
|
||||
static int
|
||||
int
|
||||
rb_gc_for_fd(int err)
|
||||
{
|
||||
if (err == EMFILE || err == ENFILE || err == ENOMEM) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue