aboutsummaryrefslogtreecommitdiffstats
path: root/ext/socket/ancdata.c
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-25 14:03:42 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-25 14:03:42 +0000
commitc17b915eb8c558df1ce4089f763e520b75ad71df (patch)
tree31e084992be8f5ae0fcc6c598cd7b56dd9c4d9bc /ext/socket/ancdata.c
parenta898f0fb4b8e31d86a372f7d1438823195015249 (diff)
downloadruby-c17b915eb8c558df1ce4089f763e520b75ad71df.tar.gz
* ext/socket/unixsocket.c (unix_recv_io): prevent FD leak when 2 fd is
sent on LP64 platform. * ext/socket/rubysocket.h (rsock_discard_cmsg_resource): declared. * ext/socket/ancdata.c (rsock_discard_cmsg_resource): renamed from discard_cmsg_resource. export it. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22630 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/socket/ancdata.c')
-rw-r--r--ext/socket/ancdata.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/ext/socket/ancdata.c b/ext/socket/ancdata.c
index 788e5307a8..a4aa000174 100644
--- a/ext/socket/ancdata.c
+++ b/ext/socket/ancdata.c
@@ -1300,10 +1300,10 @@ rb_recvmsg(int fd, struct msghdr *msg, int flags)
return rb_thread_blocking_region(nogvl_recvmsg_func, &args, RUBY_UBF_IO, 0);
}
-static void
-discard_cmsg_resource(struct msghdr *mh)
-{
#if defined(HAVE_ST_MSG_CONTROL)
+void
+rsock_discard_cmsg_resource(struct msghdr *mh)
+{
struct cmsghdr *cmh;
if (mh->msg_controllen == 0)
@@ -1319,8 +1319,8 @@ discard_cmsg_resource(struct msghdr *mh)
}
}
}
-#endif
}
+#endif
#if defined(HAVE_ST_MSG_CONTROL)
static void
@@ -1505,7 +1505,7 @@ bsock_recvmsg_internal(int argc, VALUE *argv, VALUE sock, int nonblock)
/* there are big space bug truncated.
* file descriptors limit? */
if (!gc_done) {
- discard_cmsg_resource(&mh);
+ rsock_discard_cmsg_resource(&mh);
goto gc_and_retry;
}
}
@@ -1526,14 +1526,14 @@ bsock_recvmsg_internal(int argc, VALUE *argv, VALUE sock, int nonblock)
}
#endif
if (grown) {
- discard_cmsg_resource(&mh);
+ rsock_discard_cmsg_resource(&mh);
goto retry;
}
else {
grow_buffer = 0;
if (flags != orig_flags) {
flags = orig_flags;
- discard_cmsg_resource(&mh);
+ rsock_discard_cmsg_resource(&mh);
goto retry;
}
}