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
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user