Author: aurel32
Date: 2009-05-08 10:11:01 +0000 (Fri, 08 May 2009)
New Revision: 3463

Modified:
   glibc-package/trunk/debian/patches/any/local-revert-3270.diff
Log:
Actually reverse the patch



Modified: glibc-package/trunk/debian/patches/any/local-revert-3270.diff
===================================================================
--- glibc-package/trunk/debian/patches/any/local-revert-3270.diff       
2009-05-08 09:58:28 UTC (rev 3462)
+++ glibc-package/trunk/debian/patches/any/local-revert-3270.diff       
2009-05-08 10:11:01 UTC (rev 3463)
@@ -1,197 +1,199 @@
---- a/nptl/init.c      (révision 5284)
-+++ b/nptl/init.c      (révision 5285)
-@@ -221,12 +221,21 @@
+Revert PR ntpl/3270
+
+--- a/nptl/init.c      (revision 5285)
++++ b/nptl/init.c      (revision 5284)
+@@ -221,21 +221,12 @@
  
    /* Reset the SETXID flag.  */
    struct pthread *self = THREAD_SELF;
--  int flags = THREAD_GETMEM (self, cancelhandling);
--  THREAD_SETMEM (self, cancelhandling, flags & ~SETXID_BITMASK);
-+  int flags, newval;
-+  do
-+    {
-+      flags = THREAD_GETMEM (self, cancelhandling);
-+      newval = THREAD_ATOMIC_CMPXCHG_VAL (self, cancelhandling,
-+                                        flags & ~SETXID_BITMASK, flags);
-+    }
-+  while (flags != newval);
+-  int flags, newval;
+-  do
+-    {
+-      flags = THREAD_GETMEM (self, cancelhandling);
+-      newval = THREAD_ATOMIC_CMPXCHG_VAL (self, cancelhandling,
+-                                        flags & ~SETXID_BITMASK, flags);
+-    }
+-  while (flags != newval);
++  int flags = THREAD_GETMEM (self, cancelhandling);
++  THREAD_SETMEM (self, cancelhandling, flags & ~SETXID_BITMASK);
  
    /* And release the futex.  */
    self->setxid_futex = 1;
    lll_futex_wake (&self->setxid_futex, 1, LLL_PRIVATE);
-+
-+  if (atomic_decrement_val (&__xidcmd->cntr) == 0)
-+    lll_futex_wake (&__xidcmd->cntr, 1, LLL_PRIVATE);
+-
+-  if (atomic_decrement_val (&__xidcmd->cntr) == 0)
+-    lll_futex_wake (&__xidcmd->cntr, 1, LLL_PRIVATE);
  }
  
  
---- a/nptl/allocatestack.c     (révision 5284)
-+++ b/nptl/allocatestack.c     (révision 5285)
-@@ -904,23 +904,54 @@
+--- a/nptl/allocatestack.c     (revision 5285)
++++ b/nptl/allocatestack.c     (revision 5284)
+@@ -904,54 +904,23 @@
  
  static void
  internal_function
--setxid_signal_thread (struct xid_command *cmdp, struct pthread *t)
-+setxid_mark_thread (struct xid_command *cmdp, struct pthread *t)
+-setxid_mark_thread (struct xid_command *cmdp, struct pthread *t)
++setxid_signal_thread (struct xid_command *cmdp, struct pthread *t)
  {
--  if (! IS_DETACHED (t))
-+  int ch;
-+
-+  /* Don't let the thread exit before the setxid handler runs.  */
-+  t->setxid_futex = 0;
-+
-+  do
+-  int ch;
+-
+-  /* Don't let the thread exit before the setxid handler runs.  */
+-  t->setxid_futex = 0;
+-
+-  do
++  if (! IS_DETACHED (t))
      {
--      int ch;
--      do
--      {
--        ch = t->cancelhandling;
-+      ch = t->cancelhandling;
+-      ch = t->cancelhandling;
++      int ch;
++      do
++      {
++        ch = t->cancelhandling;
  
--        /* If the thread is exiting right now, ignore it.  */
--        if ((ch & EXITING_BITMASK) != 0)
--          return;
--      }
--      while (atomic_compare_and_exchange_bool_acq (&t->cancelhandling,
--                                                 ch | SETXID_BITMASK, ch));
-+      /* If the thread is exiting right now, ignore it.  */
-+      if ((ch & EXITING_BITMASK) != 0)
-+      return;
+-      /* If the thread is exiting right now, ignore it.  */
+-      if ((ch & EXITING_BITMASK) != 0)
+-      return;
++        /* If the thread is exiting right now, ignore it.  */
++        if ((ch & EXITING_BITMASK) != 0)
++          return;
++      }
++      while (atomic_compare_and_exchange_bool_acq (&t->cancelhandling,
++                                                 ch | SETXID_BITMASK, ch));
      }
-+  while (atomic_compare_and_exchange_bool_acq (&t->cancelhandling,
-+                                             ch | SETXID_BITMASK, ch));
-+}
+-  while (atomic_compare_and_exchange_bool_acq (&t->cancelhandling,
+-                                             ch | SETXID_BITMASK, ch));
+-}
  
-+
-+static void
-+internal_function
-+setxid_unmark_thread (struct xid_command *cmdp, struct pthread *t)
-+{
-+  int ch;
-+
-+  do
-+    {
-+      ch = t->cancelhandling;
-+      if ((ch & SETXID_BITMASK) == 0)
-+      return;
-+    }
-+  while (atomic_compare_and_exchange_bool_acq (&t->cancelhandling,
-+                                             ch & ~SETXID_BITMASK, ch));
-+
-+  /* Release the futex just in case.  */
-+  t->setxid_futex = 1;
-+  lll_futex_wake (&t->setxid_futex, 1, LLL_PRIVATE);
-+}
-+
-+
-+static int
-+internal_function
-+setxid_signal_thread (struct xid_command *cmdp, struct pthread *t)
-+{
-+  if ((t->cancelhandling & SETXID_BITMASK) == 0)
-+    return 0;
-+
+-
+-static void
+-internal_function
+-setxid_unmark_thread (struct xid_command *cmdp, struct pthread *t)
+-{
+-  int ch;
+-
+-  do
+-    {
+-      ch = t->cancelhandling;
+-      if ((ch & SETXID_BITMASK) == 0)
+-      return;
+-    }
+-  while (atomic_compare_and_exchange_bool_acq (&t->cancelhandling,
+-                                             ch & ~SETXID_BITMASK, ch));
+-
+-  /* Release the futex just in case.  */
+-  t->setxid_futex = 1;
+-  lll_futex_wake (&t->setxid_futex, 1, LLL_PRIVATE);
+-}
+-
+-
+-static int
+-internal_function
+-setxid_signal_thread (struct xid_command *cmdp, struct pthread *t)
+-{
+-  if ((t->cancelhandling & SETXID_BITMASK) == 0)
+-    return 0;
+-
    int val;
    INTERNAL_SYSCALL_DECL (err);
  #if __ASSUME_TGKILL
-@@ -936,8 +967,14 @@
+@@ -967,14 +936,8 @@
      val = INTERNAL_SYSCALL (tkill, err, 2, t->tid, SIGSETXID);
  #endif
  
-+  /* If this failed, it must have had not started yet or else exited.  */
+-  /* If this failed, it must have had not started yet or else exited.  */
    if (!INTERNAL_SYSCALL_ERROR_P (val, err))
--    atomic_increment (&cmdp->cntr);
-+    {
-+      atomic_increment (&cmdp->cntr);
-+      return 1;
-+    }
-+  else
-+    return 0;
+-    {
+-      atomic_increment (&cmdp->cntr);
+-      return 1;
+-    }
+-  else
+-    return 0;
++    atomic_increment (&cmdp->cntr);
  }
  
  
-@@ -945,6 +982,7 @@
+@@ -982,7 +945,6 @@
  attribute_hidden
  __nptl_setxid (struct xid_command *cmdp)
  {
-+  int signalled;
+-  int signalled;
    int result;
    lll_lock (stack_cache_lock, LLL_PRIVATE);
  
-@@ -961,7 +999,7 @@
+@@ -999,7 +961,7 @@
        if (t == self)
        continue;
  
--      setxid_signal_thread (cmdp, t);
-+      setxid_mark_thread (cmdp, t);
+-      setxid_mark_thread (cmdp, t);
++      setxid_signal_thread (cmdp, t);
      }
  
    /* Now the list with threads using user-allocated stacks.  */
-@@ -971,16 +1009,63 @@
+@@ -1009,63 +971,16 @@
        if (t == self)
        continue;
  
--      setxid_signal_thread (cmdp, t);
-+      setxid_mark_thread (cmdp, t);
+-      setxid_mark_thread (cmdp, t);
++      setxid_signal_thread (cmdp, t);
      }
  
--  int cur = cmdp->cntr;
--  while (cur != 0)
-+  /* Iterate until we don't succeed in signalling anyone.  That means
-+     we have gotten all running threads, and their children will be
-+     automatically correct once started.  */
-+  do
+-  /* Iterate until we don't succeed in signalling anyone.  That means
+-     we have gotten all running threads, and their children will be
+-     automatically correct once started.  */
+-  do
++  int cur = cmdp->cntr;
++  while (cur != 0)
      {
--      lll_futex_wait (&cmdp->cntr, cur, LLL_PRIVATE);
--      cur = cmdp->cntr;
-+      signalled = 0;
-+
-+      list_for_each (runp, &stack_used)
-+      {
-+        struct pthread *t = list_entry (runp, struct pthread, list);
-+        if (t == self)
-+          continue;
-+
-+        signalled += setxid_signal_thread (cmdp, t);
-+      }
-+
-+      list_for_each (runp, &__stack_user)
-+      {
-+        struct pthread *t = list_entry (runp, struct pthread, list);
-+        if (t == self)
-+          continue;
-+
-+        signalled += setxid_signal_thread (cmdp, t);
-+      }
-+
-+      int cur = cmdp->cntr;
-+      while (cur != 0)
-+      {
-+        lll_futex_wait (&cmdp->cntr, cur, LLL_PRIVATE);
-+        cur = cmdp->cntr;
-+      }
+-      signalled = 0;
+-
+-      list_for_each (runp, &stack_used)
+-      {
+-        struct pthread *t = list_entry (runp, struct pthread, list);
+-        if (t == self)
+-          continue;
+-
+-        signalled += setxid_signal_thread (cmdp, t);
+-      }
+-
+-      list_for_each (runp, &__stack_user)
+-      {
+-        struct pthread *t = list_entry (runp, struct pthread, list);
+-        if (t == self)
+-          continue;
+-
+-        signalled += setxid_signal_thread (cmdp, t);
+-      }
+-
+-      int cur = cmdp->cntr;
+-      while (cur != 0)
+-      {
+-        lll_futex_wait (&cmdp->cntr, cur, LLL_PRIVATE);
+-        cur = cmdp->cntr;
+-      }
++      lll_futex_wait (&cmdp->cntr, cur, LLL_PRIVATE);
++      cur = cmdp->cntr;
      }
-+  while (signalled != 0);
+-  while (signalled != 0);
  
-+  /* Clean up flags, so that no thread blocks during exit waiting
-+     for a signal which will never come.  */
-+  list_for_each (runp, &stack_used)
-+    {
-+      struct pthread *t = list_entry (runp, struct pthread, list);
-+      if (t == self)
-+      continue;
-+
-+      setxid_unmark_thread (cmdp, t);
-+    }
-+
-+  list_for_each (runp, &__stack_user)
-+    {
-+      struct pthread *t = list_entry (runp, struct pthread, list);
-+      if (t == self)
-+      continue;
-+
-+      setxid_unmark_thread (cmdp, t);
-+    }
-+
+-  /* Clean up flags, so that no thread blocks during exit waiting
+-     for a signal which will never come.  */
+-  list_for_each (runp, &stack_used)
+-    {
+-      struct pthread *t = list_entry (runp, struct pthread, list);
+-      if (t == self)
+-      continue;
+-
+-      setxid_unmark_thread (cmdp, t);
+-    }
+-
+-  list_for_each (runp, &__stack_user)
+-    {
+-      struct pthread *t = list_entry (runp, struct pthread, list);
+-      if (t == self)
+-      continue;
+-
+-      setxid_unmark_thread (cmdp, t);
+-    }
+-
    /* This must be last, otherwise the current thread might not have
       permissions to send SIGSETXID syscall to the other threads.  */
    INTERNAL_SYSCALL_DECL (err);


-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]

Reply via email to