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

r3463 - glibc-package/trunk/debian/patches/any



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);


Reply to: