Author: sthibault Date: 2014-08-27 22:56:00 +0000 (Wed, 27 Aug 2014) New Revision: 6259
Added: glibc-package/trunk/debian/patches/hurd-i386/cvs-bind_umask.diff Removed: glibc-package/trunk/debian/patches/hurd-i386/submitted-bind_umask.diff Modified: glibc-package/trunk/debian/changelog glibc-package/trunk/debian/patches/series Log: submitted-bind_umask.diff commited upstream Modified: glibc-package/trunk/debian/changelog =================================================================== --- glibc-package/trunk/debian/changelog 2014-08-27 22:15:05 UTC (rev 6258) +++ glibc-package/trunk/debian/changelog 2014-08-27 22:56:00 UTC (rev 6259) @@ -3,8 +3,8 @@ [ Samuel Thibault ] * patches/hurd-i386/tg-thread-cancel.diff: Update patch against two other overzealous assertions. - * patches/hurd-i386/submitted-bind_umask.diff: Split into - patches/hurd-i386/submitted-bind_umask2 as requested by upstream. + * patches/hurd-i386/submitted-bind_umask.diff: Split into cvs-bind_umask.diff + and submitted-bind_umask2.diff as requested by upstream. -- Aurelien Jarno <aure...@debian.org> Wed, 27 Aug 2014 08:22:41 +0200 Copied: glibc-package/trunk/debian/patches/hurd-i386/cvs-bind_umask.diff (from rev 6258, glibc-package/trunk/debian/patches/hurd-i386/submitted-bind_umask.diff) =================================================================== --- glibc-package/trunk/debian/patches/hurd-i386/cvs-bind_umask.diff (rev 0) +++ glibc-package/trunk/debian/patches/hurd-i386/cvs-bind_umask.diff 2014-08-27 22:56:00 UTC (rev 6259) @@ -0,0 +1,76 @@ +2014-08-27 Samuel Thibault <samuel.thiba...@ens-lyon.org> + + Simplify atomicity of socket creation in bind. + + * sysdeps/mach/hurd/bind.c (__bind): Use dir_lookup(node, "") instead of + looking up the name after linking the file. + +--- + bind.c | 48 +++++++++++++++++++++++++----------------------- + 1 file changed, 25 insertions(+), 23 deletions(-) + +--- a/sysdeps/mach/hurd/bind.c ++++ b/sysdeps/mach/hurd/bind.c +@@ -40,7 +40,7 @@ __bind (int fd, __CONST_SOCKADDR_ARG ad + char *name = _hurd_sun_path_dupa (addr, len); + /* For the local domain, we must create a node in the filesystem + using the ifsock translator and then fetch the address from it. */ +- file_t dir, node; ++ file_t dir, node, ifsock; + char *n; + + dir = __file_name_split (name, &n); +@@ -61,36 +61,32 @@ __bind (int fd, __CONST_SOCKADDR_ARG ad + MACH_MSG_TYPE_COPY_SEND); + if (! err) + { +- /* Link the node, now a socket, into the target directory. */ +- err = __dir_link (dir, node, n, 1); +- if (err == EEXIST) ++ enum retry_type doretry; ++ char retryname[1024]; ++ /* Get a port to the ifsock translator. */ ++ err = __dir_lookup (node, "", 0, 0, &doretry, retryname, &ifsock); ++ if (! err && (doretry != FS_RETRY_NORMAL || retryname[0] != '\0')) + err = EADDRINUSE; + } +- __mach_port_deallocate (__mach_task_self (), node); + if (! err) + { +- /* Get a port to the ifsock translator. */ +- file_t ifsock = __file_name_lookup_under (dir, n, 0, 0); +- if (ifsock == MACH_PORT_NULL) ++ /* Get the address port. */ ++ err = __ifsock_getsockaddr (ifsock, &aport); ++ if (err == MIG_BAD_ID || err == EOPNOTSUPP) ++ err = EGRATUITOUS; ++ if (! err) + { +- err = errno; +- /* If we failed, get rid of the node we created. */ +- __dir_unlink (dir, n); +- } +- else +- { +- /* Get the address port. */ +- err = __ifsock_getsockaddr (ifsock, &aport); +- if (err == MIG_BAD_ID || err == EOPNOTSUPP) +- /* We are not talking to /hurd/ifsock. Probably +- someone came in after we linked our node, unlinked +- it, and replaced it with a different node, before we +- did our lookup. Treat it as if our link had failed +- with EEXIST. */ ++ /* Link the node, now a socket with proper mode, into the ++ target directory. */ ++ err = __dir_link (dir, node, n, 1); ++ if (err == EEXIST) + err = EADDRINUSE; ++ if (err) ++ __mach_port_deallocate (__mach_task_self (), aport); + } + __mach_port_deallocate (__mach_task_self (), ifsock); + } ++ __mach_port_deallocate (__mach_task_self (), node); + } + __mach_port_deallocate (__mach_task_self (), dir); + Deleted: glibc-package/trunk/debian/patches/hurd-i386/submitted-bind_umask.diff =================================================================== --- glibc-package/trunk/debian/patches/hurd-i386/submitted-bind_umask.diff 2014-08-27 22:15:05 UTC (rev 6258) +++ glibc-package/trunk/debian/patches/hurd-i386/submitted-bind_umask.diff 2014-08-27 22:56:00 UTC (rev 6259) @@ -1,76 +0,0 @@ -2014-08-27 Samuel Thibault <samuel.thiba...@ens-lyon.org> - - Simplify atomicity of socket creation in bind. - - * sysdeps/mach/hurd/bind.c (__bind): Use dir_lookup(node, "") instead of - looking up the name after linking the file. - ---- - bind.c | 48 +++++++++++++++++++++++++----------------------- - 1 file changed, 25 insertions(+), 23 deletions(-) - ---- a/sysdeps/mach/hurd/bind.c -+++ b/sysdeps/mach/hurd/bind.c -@@ -40,7 +40,7 @@ __bind (int fd, __CONST_SOCKADDR_ARG ad - char *name = _hurd_sun_path_dupa (addr, len); - /* For the local domain, we must create a node in the filesystem - using the ifsock translator and then fetch the address from it. */ -- file_t dir, node; -+ file_t dir, node, ifsock; - char *n; - - dir = __file_name_split (name, &n); -@@ -61,36 +61,32 @@ __bind (int fd, __CONST_SOCKADDR_ARG ad - MACH_MSG_TYPE_COPY_SEND); - if (! err) - { -- /* Link the node, now a socket, into the target directory. */ -- err = __dir_link (dir, node, n, 1); -- if (err == EEXIST) -+ enum retry_type doretry; -+ char retryname[1024]; -+ /* Get a port to the ifsock translator. */ -+ err = __dir_lookup (node, "", 0, 0, &doretry, retryname, &ifsock); -+ if (! err && (doretry != FS_RETRY_NORMAL || retryname[0] != '\0')) - err = EADDRINUSE; - } -- __mach_port_deallocate (__mach_task_self (), node); - if (! err) - { -- /* Get a port to the ifsock translator. */ -- file_t ifsock = __file_name_lookup_under (dir, n, 0, 0); -- if (ifsock == MACH_PORT_NULL) -+ /* Get the address port. */ -+ err = __ifsock_getsockaddr (ifsock, &aport); -+ if (err == MIG_BAD_ID || err == EOPNOTSUPP) -+ err = EGRATUITOUS; -+ if (! err) - { -- err = errno; -- /* If we failed, get rid of the node we created. */ -- __dir_unlink (dir, n); -- } -- else -- { -- /* Get the address port. */ -- err = __ifsock_getsockaddr (ifsock, &aport); -- if (err == MIG_BAD_ID || err == EOPNOTSUPP) -- /* We are not talking to /hurd/ifsock. Probably -- someone came in after we linked our node, unlinked -- it, and replaced it with a different node, before we -- did our lookup. Treat it as if our link had failed -- with EEXIST. */ -+ /* Link the node, now a socket with proper mode, into the -+ target directory. */ -+ err = __dir_link (dir, node, n, 1); -+ if (err == EEXIST) - err = EADDRINUSE; -+ if (err) -+ __mach_port_deallocate (__mach_task_self (), aport); - } - __mach_port_deallocate (__mach_task_self (), ifsock); - } -+ __mach_port_deallocate (__mach_task_self (), node); - } - __mach_port_deallocate (__mach_task_self (), dir); - Modified: glibc-package/trunk/debian/patches/series =================================================================== --- glibc-package/trunk/debian/patches/series 2014-08-27 22:15:05 UTC (rev 6258) +++ glibc-package/trunk/debian/patches/series 2014-08-27 22:56:00 UTC (rev 6259) @@ -149,7 +149,7 @@ hurd-i386/cvs-munmap-0.diff hurd-i386/cvs-libpthread_guardsize.diff hurd-i386/cvs-libpthread_std_thread.diff -hurd-i386/submitted-bind_umask.diff +hurd-i386/cvs-bind_umask.diff hurd-i386/submitted-bind_umask2.diff i386/local-biarch.diff -- To UNSUBSCRIBE, email to debian-glibc-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: https://lists.debian.org/e1xmm8g-0003vc...@moszumanska.debian.org