summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
Diffstat (limited to 'ext')
-rw-r--r--ext/extmk.rb.in15
-rw-r--r--ext/socket/socket.c7
2 files changed, 17 insertions, 5 deletions
diff --git a/ext/extmk.rb.in b/ext/extmk.rb.in
index b0cd861025..c8e55e0edb 100644
--- a/ext/extmk.rb.in
+++ b/ext/extmk.rb.in
@@ -311,22 +311,27 @@ def create_header()
end
end
-def dir_config(target)
- dir = with_config("%s-dir"%target)
+def dir_config(target, idefault=nil, ldefault=nil)
+ if idefault && ldefault == nil
+ default = idefault
+ idefault = default + "/include"
+ ldefault = default + "/lib"
+ end
+ dir = with_config("%s-dir"%target, default)
if dir
idir = " -I"+dir+"/include"
ldir = " -L"+dir+"/lib"
end
unless idir
- dir = with_config("%s-include"%target)
+ dir = with_config("%s-include"%target, idefault)
idir = " -I"+dir if dir
end
unless ldir
- dir = with_config("%s-lib"%target)
+ dir = with_config("%s-lib"%target, ldefault)
ldir = " -L"+dir if dir
end
- $CPPFLAGS += idir if idir
+ $CFLAGS += idir if idir
$LDFLAGS += ldir if ldir
end
diff --git a/ext/socket/socket.c b/ext/socket/socket.c
index c65de566e4..c9df07c279 100644
--- a/ext/socket/socket.c
+++ b/ext/socket/socket.c
@@ -1044,6 +1044,7 @@ s_accept(class, fd, sockaddr, len)
socklen_t *len;
{
int fd2;
+ int retry = 0;
rb_secure(3);
retry:
@@ -1053,6 +1054,12 @@ s_accept(class, fd, sockaddr, len)
TRAP_END;
if (fd2 < 0) {
switch (errno) {
+ case EMFILE:
+ case ENFILE:
+ if (retry) break;
+ rb_gc();
+ retry = 1;
+ goto retry;
case EINTR:
rb_thread_schedule();
goto retry;