ruby-changes:21545
From: akr <ko1@a...>
Date: Tue, 1 Nov 2011 07:33:01 +0900 (JST)
Subject: [ruby-changes:21545] akr:r33594 (trunk): * ext/socket/ancdata.c (nogvl_recvmsg_func): use MSG_CMSG_CLOEXEC if
akr 2011-11-01 07:32:49 +0900 (Tue, 01 Nov 2011) New Revision: 33594 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=33594 Log: * ext/socket/ancdata.c (nogvl_recvmsg_func): use MSG_CMSG_CLOEXEC if available. * ext/socket/unixsocket.c (recvmsg_blocking): ditto. Modified files: trunk/ChangeLog trunk/ext/socket/ancdata.c trunk/ext/socket/unixsocket.c Index: ChangeLog =================================================================== --- ChangeLog (revision 33593) +++ ChangeLog (revision 33594) @@ -1,3 +1,10 @@ +Tue Nov 1 07:31:55 2011 Tanaka Akira <akr@f...> + + * ext/socket/ancdata.c (nogvl_recvmsg_func): use MSG_CMSG_CLOEXEC if + available. + + * ext/socket/unixsocket.c (recvmsg_blocking): ditto. + Tue Nov 1 05:59:41 2011 Tanaka Akira <akr@f...> * ext/socket/socket.c (rsock_socketpair): use SOCK_CLOEXEC if Index: ext/socket/ancdata.c =================================================================== --- ext/socket/ancdata.c (revision 33593) +++ ext/socket/ancdata.c (revision 33594) @@ -1362,7 +1362,12 @@ nogvl_recvmsg_func(void *ptr) { struct recvmsg_args_struct *args = ptr; - return recvmsg(args->fd, args->msg, args->flags); + int flags = args->flags; +#ifdef MSG_CMSG_CLOEXEC + /* MSG_CMSG_CLOEXEC is available since Linux 2.6.23. Linux 2.6.18 silently ignore it. */ + flags |= MSG_CMSG_CLOEXEC; +#endif + return recvmsg(args->fd, args->msg, flags); } static ssize_t Index: ext/socket/unixsocket.c =================================================================== --- ext/socket/unixsocket.c (revision 33593) +++ ext/socket/unixsocket.c (revision 33594) @@ -264,7 +264,12 @@ recvmsg_blocking(void *data) { struct iomsg_arg *arg = data; - return recvmsg(arg->fd, &arg->msg, 0); + int flags = 0; +#ifdef MSG_CMSG_CLOEXEC + /* MSG_CMSG_CLOEXEC is available since Linux 2.6.23. Linux 2.6.18 silently ignore it. */ + flags |= MSG_CMSG_CLOEXEC; +#endif + return recvmsg(arg->fd, &arg->msg, flags); } /* -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/