diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-02-25 14:03:42 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-02-25 14:03:42 +0000 |
commit | c17b915eb8c558df1ce4089f763e520b75ad71df (patch) | |
tree | 31e084992be8f5ae0fcc6c598cd7b56dd9c4d9bc /ext/socket/ancdata.c | |
parent | a898f0fb4b8e31d86a372f7d1438823195015249 (diff) |
* 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.c | 14 |
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; } } |