This is an automated email from the git hooks/post-receive script. sthibault pushed a commit to branch sid in repository glibc.
commit a7f30bd811873d459a885682d3d5370c7cd96132 Author: Samuel Thibault <samuel.thiba...@ens-lyon.org> Date: Mon Dec 19 04:35:27 2016 +0100 hurd: tg-magic-pid: fix spurious port deallocation --- debian/patches/hurd-i386/tg-magic-pid.diff | 125 ++++++++++++++++++++++++++--- 1 file changed, 113 insertions(+), 12 deletions(-) diff --git a/debian/patches/hurd-i386/tg-magic-pid.diff b/debian/patches/hurd-i386/tg-magic-pid.diff index 14b41fd..6647c27 100644 --- a/debian/patches/hurd-i386/tg-magic-pid.diff +++ b/debian/patches/hurd-i386/tg-magic-pid.diff @@ -5,11 +5,11 @@ Subject: [PATCH] hurd: Handle `pid' magical lookup retry retry. --- - hurd/lookup-retry.c | 35 +++++++++++++++++++++++++++++++++++ - 1 file changed, 35 insertions(+) + hurd/lookup-retry.c | 78 ++++++++++++++++++++++++++++++++++++++++++++--------- + 1 file changed, 65 insertions(+), 13 deletions(-) diff --git a/hurd/lookup-retry.c b/hurd/lookup-retry.c -index aee2ba8..845bc24 100644 +index aee2ba8..6ed8de1 100644 --- a/hurd/lookup-retry.c +++ b/hurd/lookup-retry.c @@ -25,6 +25,7 @@ @@ -28,7 +28,100 @@ index aee2ba8..845bc24 100644 error_t lookup_op (file_t startdir) { -@@ -306,6 +308,26 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) +@@ -107,14 +109,15 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) + { + case FS_RETRY_REAUTH: + if (err = reauthenticate (*result)) +- return err; ++ goto out; + /* Fall through. */ + + case FS_RETRY_NORMAL: + if (nloops++ >= __eloop_threshold ()) + { + __mach_port_deallocate (__mach_task_self (), *result); +- return ELOOP; ++ err = ELOOP; ++ goto out; + } + + /* An empty RETRYNAME indicates we have the final port. */ +@@ -174,7 +177,7 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) + + if (err) + __mach_port_deallocate (__mach_task_self (), *result); +- return err; ++ goto out; + } + + startdir = *result; +@@ -189,7 +192,10 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) + if (*result != MACH_PORT_NULL) + __mach_port_deallocate (__mach_task_self (), *result); + if (nloops++ >= __eloop_threshold ()) +- return ELOOP; ++ { ++ err = ELOOP; ++ goto out; ++ } + file_name = &retryname[1]; + break; + +@@ -208,7 +214,8 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) + (*end != '/' && *end != '\0')) + { + errno = save; +- return ENOENT; ++ err = ENOENT; ++ goto out; + } + if (! get_dtable_port) + err = EGRATUITOUS; +@@ -226,9 +233,12 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) + } + errno = save; + if (err) +- return err; ++ goto out; + if (*end == '\0') +- return 0; ++ { ++ err = 0; ++ goto out; ++ } + else + { + /* Do a normal retry on the remaining components. */ +@@ -255,9 +265,12 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) + if (err = __host_info (__mach_host_self (), HOST_BASIC_INFO, + (integer_t *) &hostinfo, + &hostinfocnt)) +- return err; ++ goto out; + if (hostinfocnt != HOST_BASIC_INFO_COUNT) +- return EGRATUITOUS; ++ { ++ err = EGRATUITOUS; ++ goto out; ++ } + p = _itoa (hostinfo.cpu_subtype, &retryname[8], 10, 0); + *--p = '/'; + p = _itoa (hostinfo.cpu_type, &retryname[8], 10, 0); +@@ -293,10 +306,11 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) + } + + case '\0': +- return opentty (result); ++ err = opentty (result); ++ goto out; + case '/': + if (err = opentty (&startdir)) +- return err; ++ goto out; + strcpy (retryname, &retryname[4]); + break; + default: +@@ -306,14 +320,48 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) goto bad_magic; break; @@ -45,6 +138,8 @@ index aee2ba8..845bc24 100644 + strcpy (retryname, buf); + + /* Do a normal retry on the remaining components. */ ++ __mach_port_mod_refs (__mach_task_self (), lastdir, ++ MACH_PORT_RIGHT_SEND, 1); + startdir = lastdir; + file_name = retryname; + } @@ -54,11 +149,18 @@ index aee2ba8..845bc24 100644 + default: bad_magic: - return EGRATUITOUS; -@@ -316,6 +338,16 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) - return EGRATUITOUS; +- return EGRATUITOUS; ++ err = EGRATUITOUS; ++ goto out; } + break; + default: +- return EGRATUITOUS; ++ err = EGRATUITOUS; ++ goto out; ++ } ++ + if (MACH_PORT_VALID (*result) && *result != lastdir) + { + if (MACH_PORT_VALID (lastdir)) @@ -67,15 +169,14 @@ index aee2ba8..845bc24 100644 + lastdir = *result; + __mach_port_mod_refs (__mach_task_self (), lastdir, + MACH_PORT_RIGHT_SEND, 1); -+ } -+ + } + if (startdir != MACH_PORT_NULL) - { - err = lookup_op (startdir); -@@ -326,6 +358,9 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) +@@ -326,6 +374,10 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) err = (*use_init_port) (dirport, &lookup_op); } while (! err); ++out: + if (MACH_PORT_VALID (lastdir)) + __mach_port_deallocate (__mach_task_self (), lastdir); + -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-glibc/glibc.git