[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]