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

r5015 - in glibc-package/trunk/debian: . patches patches/any



Author: aurel32
Date: 2011-10-30 15:11:57 +0000 (Sun, 30 Oct 2011)
New Revision: 5015

Added:
   glibc-package/trunk/debian/patches/any/cvs-nptl-pthread-race.diff
Modified:
   glibc-package/trunk/debian/changelog
   glibc-package/trunk/debian/patches/series
Log:
  * patches/any/cvs-nptl-pthread-race.diff: fix a race in NPTL code that
    sometimes causes a deadlock when calling fork() from a thread.



Modified: glibc-package/trunk/debian/changelog
===================================================================
--- glibc-package/trunk/debian/changelog	2011-10-28 23:51:54 UTC (rev 5014)
+++ glibc-package/trunk/debian/changelog	2011-10-30 15:11:57 UTC (rev 5015)
@@ -4,6 +4,8 @@
   * patches/i386/local-cpuid-level2.diff: fix a typo.  Closes: #609389.
   * Don't ship /usr/share/doc/locales/README.  Closes: #643885, #643887.
   * Ignore tst-cancelx17.out error on amd64.  Closes: #643567.
+  * patches/any/cvs-nptl-pthread-race.diff: fix a race in NPTL code that
+    sometimes causes a deadlock when calling fork() from a thread.
 
   [ Samuel Thibault ]
   * patches/hurd-i386/submitted-setresid.diff: New patch to fix -1 passed to

Added: glibc-package/trunk/debian/patches/any/cvs-nptl-pthread-race.diff
===================================================================
--- glibc-package/trunk/debian/patches/any/cvs-nptl-pthread-race.diff	                        (rev 0)
+++ glibc-package/trunk/debian/patches/any/cvs-nptl-pthread-race.diff	2011-10-30 15:11:57 UTC (rev 5015)
@@ -0,0 +1,167 @@
+2011-09-15  Andreas Schwab  <schwab@redhat.com>
+
+	* sysdeps/pthread/list.h: Define only list_t if __need_list_t is
+	defined.
+	(list_add): Add atomic_write_barrier.
+	* descr.h: Define __need_list_t before including <list.h>.
+	* nptl-init.c: Include <list.h>
+	* allocatestack.c: Likewise.
+
+---
+ nptl/allocatestack.c        |    1 +
+ nptl/descr.h                |    1 +
+ nptl/nptl-init.c            |    1 +
+ nptl/sysdeps/pthread/list.h |   31 +++++++++++++++++++++++--------
+ nptl_db/ChangeLog           |    4 ++++
+ nptl_db/thread_dbP.h        |    3 ++-
+ 6 files changed, 32 insertions(+), 9 deletions(-)
+
+--- a/nptl/allocatestack.c
++++ b/nptl/allocatestack.c
+@@ -27,6 +27,7 @@
+ #include <sys/param.h>
+ #include <dl-sysdep.h>
+ #include <tls.h>
++#include <list.h>
+ #include <lowlevellock.h>
+ #include <kernel-features.h>
+ 
+--- a/nptl/descr.h
++++ b/nptl/descr.h
+@@ -26,6 +26,7 @@
+ #include <stdbool.h>
+ #include <sys/types.h>
+ #include <hp-timing.h>
++#define __need_list_t
+ #include <list.h>
+ #include <lowlevellock.h>
+ #include <pthreaddef.h>
+--- a/nptl/nptl-init.c
++++ b/nptl/nptl-init.c
+@@ -29,6 +29,7 @@
+ #include <atomic.h>
+ #include <ldsodefs.h>
+ #include <tls.h>
++#include <list.h>
+ #include <fork.h>
+ #include <version.h>
+ #include <shlib-compat.h>
+--- a/nptl/sysdeps/pthread/list.h
++++ b/nptl/sysdeps/pthread/list.h
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 2002, 2009 Free Software Foundation, Inc.
++/* Copyright (C) 2002, 2009, 2011 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
+ 
+@@ -18,27 +18,39 @@
+    02111-1307 USA.  */
+ 
+ #ifndef _LIST_H
+-#define _LIST_H	1
++
++#ifndef __need_list_t
++# define _LIST_H	1
++#endif
+ 
+ /* The definitions of this file are adopted from those which can be
+    found in the Linux kernel headers to enable people familiar with
+    the latter find their way in these sources as well.  */
+ 
+ 
++#if defined __need_list_t || defined _LIST_H
++# ifndef __list_t_defined
++#  define __list_t_defined
+ /* Basic type for the double-link list.  */
+ typedef struct list_head
+ {
+   struct list_head *next;
+   struct list_head *prev;
+ } list_t;
++# endif
++# undef __need_list_t
++#endif
++
++#ifdef _LIST_H
+ 
++# include <atomic.h>
+ 
+ /* Define a variable with the head and tail of the list.  */
+-#define LIST_HEAD(name) \
++# define LIST_HEAD(name) \
+   list_t name = { &(name), &(name) }
+ 
+ /* Initialize a new list head.  */
+-#define INIT_LIST_HEAD(ptr) \
++# define INIT_LIST_HEAD(ptr) \
+   (ptr)->next = (ptr)->prev = (ptr)
+ 
+ 
+@@ -49,6 +61,7 @@
+   newp->next = head->next;
+   newp->prev = head;
+   head->next->prev = newp;
++  atomic_write_barrier ();
+   head->next = newp;
+ }
+ 
+@@ -78,26 +91,28 @@
+ 
+ 
+ /* Get typed element from list at a given position.  */
+-#define list_entry(ptr, type, member) \
++# define list_entry(ptr, type, member) \
+   ((type *) ((char *) (ptr) - (unsigned long) (&((type *) 0)->member)))
+ 
+ 
+ 
+ /* Iterate forward over the elements of the list.  */
+-#define list_for_each(pos, head) \
++# define list_for_each(pos, head) \
+   for (pos = (head)->next; pos != (head); pos = pos->next)
+ 
+ 
+ /* Iterate forward over the elements of the list.  */
+-#define list_for_each_prev(pos, head) \
++# define list_for_each_prev(pos, head) \
+   for (pos = (head)->prev; pos != (head); pos = pos->prev)
+ 
+ 
+ /* Iterate backwards over the elements list.  The list elements can be
+    removed from the list while doing this.  */
+-#define list_for_each_prev_safe(pos, p, head) \
++# define list_for_each_prev_safe(pos, p, head) \
+   for (pos = (head)->prev, p = pos->prev; \
+        pos != (head); \
+        pos = p, p = pos->prev)
+ 
++#endif /* _LIST_H */
++
+ #endif	/* list.h */
+--- a/nptl_db/ChangeLog
++++ b/nptl_db/ChangeLog
+@@ -1,3 +1,7 @@
++2011-09-15  Andreas Schwab  <schwab@redhat.com>
++
++	* thread_dbP.h: Include <list.h>
++
+ 2009-08-23  Roland McGrath  <roland@redhat.com>
+ 
+ 	* td_ta_map_lwp2thr.c (__td_ta_lookup_th_unique): Move ta_ok check
+--- a/nptl_db/thread_dbP.h
++++ b/nptl_db/thread_dbP.h
+@@ -1,5 +1,5 @@
+ /* Private header for thread debug library
+-   Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
++   Copyright (C) 2003, 2004, 2007, 2011 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+ 
+    The GNU C Library is free software; you can redistribute it and/or
+@@ -29,6 +29,7 @@
+ #include "proc_service.h"
+ #include "thread_db.h"
+ #include "../nptl/pthreadP.h"  	/* This is for *_BITMASK only.  */
++#include <list.h>
+ 
+ /* Indeces for the symbol names.  */
+ enum

Modified: glibc-package/trunk/debian/patches/series
===================================================================
--- glibc-package/trunk/debian/patches/series	2011-10-28 23:51:54 UTC (rev 5014)
+++ glibc-package/trunk/debian/patches/series	2011-10-30 15:11:57 UTC (rev 5015)
@@ -294,3 +294,4 @@
 any/cvs-dlopen-tls.diff
 any/submitted-glob_h-ifdef.diff
 any/cvs-dl_close-scope-handling.diff
+any/cvs-nptl-pthread-race.diff


Reply to: