[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[glibc] 01/01: hurd-i386/tg-magic-pid.diff: New patch, add support for /proc/self



This is an automated email from the git hooks/post-receive script.

sthibault pushed a commit to branch sid
in repository glibc.

commit eb123c94201494d030f7c1f75f5795fdbe5a71de
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date:   Mon Dec 19 01:58:36 2016 +0100

    hurd-i386/tg-magic-pid.diff: New patch, add support for /proc/self
---
 debian/changelog                           |  1 +
 debian/patches/hurd-i386/tg-magic-pid.diff | 86 ++++++++++++++++++++++++++++++
 debian/patches/series                      |  1 +
 3 files changed, 88 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index 7aa4254..ab28e82 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -3,6 +3,7 @@ glibc (2.24-9) UNRELEASED; urgency=medium
   [ Samuel Thibault ]
   * hurd-i386/tg-libpthread-gsync-mutex.diff: Update patch, fixes trylock
     error return.
+  * hurd-i386/tg-magic-pid.diff: New patch, add support for /proc/self.
 
   [ Aurelien Jarno ]
   * debian/sysdeps/{amd64,i386,x32}.mk: disable lock elision (aka Intel TSX)
diff --git a/debian/patches/hurd-i386/tg-magic-pid.diff b/debian/patches/hurd-i386/tg-magic-pid.diff
new file mode 100644
index 0000000..14b41fd
--- /dev/null
+++ b/debian/patches/hurd-i386/tg-magic-pid.diff
@@ -0,0 +1,86 @@
+From: Justus Winter <4winter@informatik.uni-hamburg.de>
+Subject: [PATCH] hurd: Handle `pid' magical lookup retry
+
+        * hurd/lookup-retry.c: Handle `pid' magical lookup
+        retry.
+
+---
+ hurd/lookup-retry.c | 35 +++++++++++++++++++++++++++++++++++
+ 1 file changed, 35 insertions(+)
+
+diff --git a/hurd/lookup-retry.c b/hurd/lookup-retry.c
+index aee2ba8..845bc24 100644
+--- a/hurd/lookup-retry.c
++++ b/hurd/lookup-retry.c
+@@ -25,6 +25,7 @@
+ #include <string.h>
+ #include <_itoa.h>
+ #include <eloop-threshold.h>
++#include <unistd.h>
+ 
+ /* Translate the error from dir_lookup into the error the user sees.  */
+ static inline error_t
+@@ -59,6 +60,7 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port)
+   error_t err;
+   char *file_name;
+   int nloops;
++  file_t lastdir = MACH_PORT_NULL;
+ 
+   error_t lookup_op (file_t startdir)
+     {
+@@ -306,6 +308,26 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port)
+ 		goto bad_magic;
+ 	      break;
+ 
++	    case 'p':
++	      if (retryname[1] == 'i' && retryname[2] == 'd' &&
++		  (retryname[3] == '/' || retryname[3] == 0))
++		{
++		  char *p, buf[1024];  /* XXX */
++		  size_t len;
++		  p = _itoa (__getpid (), &buf[sizeof buf], 10, 0);
++		  len = &buf[sizeof buf] - p;
++		  memcpy (buf, p, len);
++		  strcpy (buf + len, &retryname[3]);
++		  strcpy (retryname, buf);
++
++		  /* Do a normal retry on the remaining components.  */
++		  startdir = lastdir;
++		  file_name = retryname;
++		}
++	      else
++		goto bad_magic;
++	      break;
++
+ 	    default:
+ 	    bad_magic:
+ 	      return EGRATUITOUS;
+@@ -316,6 +338,16 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port)
+ 	  return EGRATUITOUS;
+ 	}
+ 
++      if (MACH_PORT_VALID (*result) && *result != lastdir)
++	{
++	  if (MACH_PORT_VALID (lastdir))
++	    __mach_port_deallocate (__mach_task_self (), lastdir);
++
++	  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)
+ 	err = (*use_init_port) (dirport, &lookup_op);
+     } while (! err);
+ 
++  if (MACH_PORT_VALID (lastdir))
++    __mach_port_deallocate (__mach_task_self (), lastdir);
++
+   return err;
+ }
+ weak_alias (__hurd_file_name_lookup_retry, hurd_file_name_lookup_retry)
+-- 
+tg: (7bb5f8a..) t/magic-pid (depends on: baseline)
diff --git a/debian/patches/series b/debian/patches/series
index b829544..4c8f68a 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -140,6 +140,7 @@ hurd-i386/tg-NOFOLLOW.diff
 hurd-i386/tg-NOFOLLOW-DIRECTORY.diff
 hurd-i386/tg-libc_rwlock_recursive.diff
 hurd-i386/cvs-hurd_signal.h_c++.diff
+hurd-i386/tg-magic-pid.diff
 
 i386/local-biarch.diff
 i386/local-cmov.diff

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-glibc/glibc.git


Reply to: