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

Bug#694962: marked as done (libc6:amd64: pulseaudio hangs in pthread_cond_wait)



Your message dated Mon, 28 Jan 2013 08:48:42 +0000
with message-id <E1TzkOQ-0004bB-Uv@franck.debian.org>
and subject line Bug#694962: fixed in eglibc 2.17-0experimental0
has caused the Debian Bug report #694962,
regarding libc6:amd64: pulseaudio hangs in pthread_cond_wait
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
694962: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=694962
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: libc6
Version: 2.16-0experimental1
Severity: important

Dear Maintainer,
http://sourceware.org/bugzilla/show_bug.cgi?id=14417
libcanberra and gstreamer hangs on pulseaudio calls.

Upstream fixed this only in master at :
http://sourceware.org/git/?p=glibc.git;a=commit;h=c30e8edf7c56e55a81173da39f3e721ab17b9db6

Seems like debian handled it by reverting an upstream commit via:
debian/patches/i386/local-pthread_cond_wait.diff
but only for x86 arch (I am on x86_64 here).

Thus I hacked down this patch for debian from former upstream fix to
debian 2.16 experimental1 quilt patched sources. Ie the i386 fix is
partially missing as the latter debian i386 change removed one of the
files it patched.

"It works" but I have not done a review yet. Might serve as a starting
point. All in all I guess the debian revert
i386/local-pthread_cond_wait.diff should be added back and the upstream
fixe used instead. But sadly upstream did not backported this patch to
release/2.16/master so it is hard to tell if there are former diff in
master that might fixes others issues than this pulseaudio hang. 


Best regards,
Alban

-- System Information:
Debian Release: wheezy/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'testing'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 3.7.0-rc4test0-00020-g0e4a43e (SMP w/2 CPU cores)
Locale: LANG=fr_FR.utf8, LC_CTYPE=fr_FR.utf8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages libc6:amd64 depends on:
ii  debconf [debconf-2.0]  1.5.46
ii  libgcc1                1:4.7.2-12

libc6:amd64 recommends no packages.

Versions of packages libc6:amd64 suggests:
pn  glibc-doc  <none>
pn  locales    <none>

-- debconf information:
* glibc/upgrade: true
  glibc/disable-screensaver:
  glibc/restart-failed:
* glibc/restart-services: spamassassin ssh saslauthd samba openbsd-inetd mysql exim4 cups cron atd apache2
* libraries/restart-without-asking: false
>From c30e8edf7c56e55a81173da39f3e721ab17b9db6 Mon Sep 17 00:00:00 2001
From: Siddhesh Poyarekar <siddhesh@redhat.com>
Date: Fri, 5 Oct 2012 18:52:35 +0530
Subject: [PATCH] Unlock mutex before going back to waiting for PI mutexes

[BZ #14417]
A futex call with FUTEX_WAIT_REQUEUE_PI returns with the mutex locked
on success.  If such a successful thread is pipped to the cond_lock by
another spuriously woken waiter, it could be sent back to wait on the
futex with the mutex lock held, thus causing a deadlock.  So it is
necessary that the thread relinquishes the mutex before going back to
sleep.
---
 NEWS                                               |    6 +-
 nptl/ChangeLog                                     |   19 ++
 nptl/Makefile                                      |    4 +-
 .../sysv/linux/i386/i486/pthread_cond_timedwait.S  |   38 +++-
 .../unix/sysv/linux/i386/i486/pthread_cond_wait.S  |  117 +++-------
 .../sysv/linux/x86_64/pthread_cond_timedwait.S     |   51 ++++-
 .../unix/sysv/linux/x86_64/pthread_cond_wait.S     |  121 ++++------
 nptl/tst-cond24.c                                  |  249 ++++++++++++++++++++
 8 files changed, 430 insertions(+), 175 deletions(-)
 create mode 100644 nptl/tst-cond24.c

--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -210,7 +210,7 @@
 	tst-cond1 tst-cond2 tst-cond3 tst-cond4 tst-cond5 tst-cond6 tst-cond7 \
 	tst-cond8 tst-cond9 tst-cond10 tst-cond11 tst-cond12 tst-cond13 \
 	tst-cond14 tst-cond15 tst-cond16 tst-cond17 tst-cond18 tst-cond19 \
-	tst-cond20 tst-cond21 tst-cond22 tst-cond23 \
+	tst-cond20 tst-cond21 tst-cond22 tst-cond23 tst-cond24 \
 	tst-robust1 tst-robust2 tst-robust3 tst-robust4 tst-robust5 \
 	tst-robust6 tst-robust7 tst-robust8 tst-robust9 \
 	tst-robustpi1 tst-robustpi2 tst-robustpi3 tst-robustpi4 tst-robustpi5 \
@@ -288,6 +288,7 @@
 
 LDFLAGS-pthread.so = -Wl,--enable-new-dtags,-z,nodelete,-z,initfirst
 
+LDFLAGS-tst-cond24 = -lrt
 
 include ../Makeconfig
 
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
@@ -214,8 +214,23 @@
 	sete	24(%esp)
 	je	41f
 
-	/* Normal and PI futexes dont mix. Use normal futex functions only
-	   if the kernel does not support the PI futex functions.  */
+	/* When a futex syscall with FUTEX_WAIT_REQUEUE_PI returns
+	   successfully, it has already locked the mutex for us and the
+	   pi_flag (24(%esp)) is set to denote that fact.  However, if another
+	   thread changed the futex value before we entered the wait, the
+	   syscall may return an EAGAIN and the mutex is not locked.  We go
+	   ahead with a success anyway since later we look at the pi_flag to
+	   decide if we got the mutex or not.  The sequence numbers then make
+	   sure that only one of the threads actually wake up.  We retry using
+	   normal FUTEX_WAIT only if the kernel returned ENOSYS, since normal
+	   and PI futexes don't mix.
+
+	   Note that we don't check for EAGAIN specifically; we assume that the
+	   only other error the futex function could return is EAGAIN (barring
+	   the ETIMEOUT of course, for the timeout case in futex) since
+	   anything else would mean an error in our function.  It is too
+	   expensive to do that check for every call (which is  quite common in
+	   case of a large number of threads), so it has been skipped.  */
 	cmpl	$-ENOSYS, %eax
 	jne	41f
 	xorl	%ecx, %ecx
@@ -275,9 +290,24 @@
 	jne	9f
 
 15:	cmpl	$-ETIMEDOUT, %esi
-	jne	8b
+	je	28f
 
-	addl	$1, wakeup_seq(%ebx)
+	/* We need to go back to futex_wait.  If we're using requeue_pi, then
+	   release the mutex we had acquired and go back.  */
+	movl	24(%esp), %edx
+	test	%edx, %edx
+	jz	8b
+
+	/* Adjust the mutex values first and then unlock it.  The unlock
+	   should always succeed or else the kernel did not lock the mutex
+	   correctly.  */
+	movl	dep_mutex(%ebx), %eax
+	call	__pthread_mutex_cond_lock_adjust
+	xorl	%edx, %edx
+	call	__pthread_mutex_unlock_usercnt
+	jmp	8b
+
+28:	addl	$1, wakeup_seq(%ebx)
 	adcl	$0, wakeup_seq+4(%ebx)
 	addl	$1, cond_futex(%ebx)
 	movl	$ETIMEDOUT, %esi
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
@@ -103,7 +103,7 @@
 	mov	%RSI_LP, dep_mutex(%rdi)
 
 22:
-	xorl	%r15d, %r15d
+	xorb	%r15b, %r15b
 
 #ifndef __ASSUME_FUTEX_CLOCK_REALTIME
 #  ifdef PIC
@@ -190,18 +190,39 @@
 	movl	$SYS_futex, %eax
 	syscall
 
-	movl	$1, %r15d
+	cmpl	$0, %eax
+	sete	%r15b
+
 #ifdef __ASSUME_REQUEUE_PI
 	jmp	62f
 #else
-	cmpq	$-4095, %rax
-	jnae	62f
+	je	62f
+
+	/* When a futex syscall with FUTEX_WAIT_REQUEUE_PI returns
+	   successfully, it has already locked the mutex for us and the
+	   pi_flag (%r15b) is set to denote that fact.  However, if another
+	   thread changed the futex value before we entered the wait, the
+	   syscall may return an EAGAIN and the mutex is not locked.  We go
+	   ahead with a success anyway since later we look at the pi_flag to
+	   decide if we got the mutex or not.  The sequence numbers then make
+	   sure that only one of the threads actually wake up.  We retry using
+	   normal FUTEX_WAIT only if the kernel returned ENOSYS, since normal
+	   and PI futexes don't mix.
+
+	   Note that we don't check for EAGAIN specifically; we assume that the
+	   only other error the futex function could return is EAGAIN (barring
+	   the ETIMEOUT of course, for the timeout case in futex) since
+	   anything else would mean an error in our function.  It is too
+	   expensive to do that check for every call (which is  quite common in
+	   case of a large number of threads), so it has been skipped.  */
+	cmpl    $-ENOSYS, %eax
+	jne     62f
 
 	subq	$cond_futex, %rdi
 #endif
 
 61:	movl	$(FUTEX_WAIT_BITSET|FUTEX_PRIVATE_FLAG), %esi
-60:	xorl	%r15d, %r15d
+60:	xorb	%r15b, %r15b
 	xorl	%eax, %eax
 	/* The following only works like this because we only support
 	   two clocks, represented using a single bit.  */
@@ -248,7 +269,23 @@
 	ja	39f
 
 45:	cmpq	$-ETIMEDOUT, %r14
-	jne	38b
+	je	99f
+
+	/* We need to go back to futex_wait.  If we're using requeue_pi, then
+	   release the mutex we had acquired and go back.  */
+	test	%r15b, %r15b
+	jz	38b
+
+	/* Adjust the mutex values first and then unlock it.  The unlock
+	   should always succeed or else the kernel did not lock the
+	   mutex correctly.  */
+	movq	%r8, %rdi
+	callq	__pthread_mutex_cond_lock_adjust
+	xorl	%esi, %esi
+	callq	__pthread_mutex_unlock_usercnt
+	/* Reload cond_var.  */
+	movq	8(%rsp), %rdi
+	jmp	38b
 
 99:	incq	wakeup_seq(%rdi)
 	incl	cond_futex(%rdi)
@@ -298,7 +335,7 @@
 	/* If requeue_pi is used the kernel performs the locking of the
 	   mutex. */
 41:	movq	16(%rsp), %rdi
-	testl	%r15d, %r15d
+	testb	%r15b, %r15b
 	jnz	64f
 
 	callq	__pthread_mutex_cond_lock
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
@@ -136,19 +136,36 @@
 	cmpl	$PI_BIT, %eax
 	jne	61f
 
-90:
 	movl	$(FUTEX_WAIT_REQUEUE_PI|FUTEX_PRIVATE_FLAG), %esi
 	movl	$SYS_futex, %eax
 	syscall
 
-	movl	$1, %r8d
-	cmpq	$-EAGAIN, %rax
-	je	91f
+	cmpl	$0, %eax
+	sete	%r8b
+
 #ifdef __ASSUME_REQUEUE_PI
 	jmp	62f
 #else
-	cmpq	$-4095, %rax
-	jnae	62f
+	je	62f
+
+	/* When a futex syscall with FUTEX_WAIT_REQUEUE_PI returns
+	   successfully, it has already locked the mutex for us and the
+	   pi_flag (%r8b) is set to denote that fact.  However, if another
+	   thread changed the futex value before we entered the wait, the
+	   syscall may return an EAGAIN and the mutex is not locked.  We go
+	   ahead with a success anyway since later we look at the pi_flag to
+	   decide if we got the mutex or not.  The sequence numbers then make
+	   sure that only one of the threads actually wake up.  We retry using
+	   normal FUTEX_WAIT only if the kernel returned ENOSYS, since normal
+	   and PI futexes don't mix.
+
+	   Note that we don't check for EAGAIN specifically; we assume that the
+	   only other error the futex function could return is EAGAIN since
+	   anything else would mean an error in our function.  It is too
+	   expensive to do that check for every call (which is 	quite common in
+	   case of a large number of threads), so it has been skipped.  */
+	cmpl	$-ENOSYS, %eax
+	jne	62f
 
 # ifndef __ASSUME_PRIVATE_FUTEX
 	movl	$FUTEX_WAIT, %esi
@@ -161,7 +178,7 @@
 #else
 	orl	%fs:PRIVATE_FUTEX, %esi
 #endif
-60:	xorl	%r8d, %r8d
+60:	xorb	%r8b, %r8b
 	movl	$SYS_futex, %eax
 	syscall
 
@@ -191,10 +208,10 @@
 	jne	16f
 
 	cmpq	24(%rsp), %r9
-	jbe	8b
+	jbe	19f
 
 	cmpq	%rax, %r9
-	jna	8b
+	jna	19f
 
 	incq	woken_seq(%rdi)
 
@@ -236,7 +253,7 @@
 	/* If requeue_pi is used the kernel performs the locking of the
 	   mutex. */
 11:	movq	16(%rsp), %rdi
-	testl	%r8d, %r8d
+	testb	%r8b, %r8b
 	jnz	18f
 
 	callq	__pthread_mutex_cond_lock
@@ -253,6 +270,23 @@
 	xorl	%eax, %eax
 	jmp	14b
 
+	/* We need to go back to futex_wait.  If we're using requeue_pi, then
+	   release the mutex we had acquired and go back.  */
+19:	testb	%r8b, %r8b
+	jz	8b
+
+	/* Adjust the mutex values first and then unlock it.  The unlock
+	   should always succeed or else the kernel did not lock the mutex
+	   correctly.  */
+	movq	16(%rsp), %rdi
+	callq	__pthread_mutex_cond_lock_adjust
+	movq	%rdi, %r8
+	xorl	%esi, %esi
+	callq	__pthread_mutex_unlock_usercnt
+	/* Reload cond_var.  */
+	movq	8(%rsp), %rdi
+	jmp	8b
+
 	/* Initial locking failed.  */
 1:
 #if cond_lock != 0
@@ -331,72 +365,6 @@
 13:	movq	%r10, %rax
 	jmp	14b
 
-91:
-.LcleanupSTART2:
-	/* FUTEX_WAIT_REQUEUE_PI returned EAGAIN.  We need to
-	   call it again.  */
-	movq	8(%rsp), %rdi
-
-	/* Get internal lock.  */
-	movl	$1, %esi
-	xorl	%eax, %eax
-	LOCK
-#if cond_lock == 0
-	cmpxchgl %esi, (%rdi)
-#else
-	cmpxchgl %esi, cond_lock(%rdi)
-#endif
-	jz	92f
-
-#if cond_lock != 0
-	addq	$cond_lock, %rdi
-#endif
-	LP_OP(cmp) $-1, dep_mutex-cond_lock(%rdi)
-	movl	$LLL_PRIVATE, %eax
-	movl	$LLL_SHARED, %esi
-	cmovne	%eax, %esi
-	callq	__lll_lock_wait
-#if cond_lock != 0
-	subq	$cond_lock, %rdi
-#endif
-92:
-	/* Increment the cond_futex value again, so it can be used as a new
-	   expected value. */
-	incl	cond_futex(%rdi)
-	movl	cond_futex(%rdi), %edx
-
-	/* Increment total_seq to ensure we do not lose wakeups.  */
-	incq	total_seq(%rdi)
-
-	/* Release internal lock.  */
-	LOCK
-#if cond_lock == 0
-	decl	(%rdi)
-#else
-	decl	cond_lock(%rdi)
-#endif
-	jz	93f
-
-#if cond_lock != 0
-	addq	$cond_lock, %rdi
-#endif
-	LP_OP(cmp) $-1, dep_mutex-cond_lock(%rdi)
-	movl	$LLL_PRIVATE, %eax
-	movl	$LLL_SHARED, %esi
-	cmovne	%eax, %esi
-	/* The call preserves %rdx.  */
-	callq	__lll_unlock_wake
-#if cond_lock != 0
-	subq	$cond_lock, %rdi
-#endif
-93:
-	/* Set the rest of SYS_futex args for FUTEX_WAIT_REQUEUE_PI. */
-	xorq	%r10, %r10
-	mov	dep_mutex(%rdi), %R8_LP
-	leaq	cond_futex(%rdi), %rdi
-	jmp	90b
-.LcleanupEND2:
-
 	.size	__pthread_cond_wait, .-__pthread_cond_wait
 versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait,
 		  GLIBC_2_3_2)
@@ -550,10 +518,6 @@
 	.uleb128 .LcleanupEND-.LcleanupSTART
 	.uleb128 __condvar_cleanup1-.LSTARTCODE
 	.uleb128 0
-	.uleb128 .LcleanupSTART2-.LSTARTCODE
-	.uleb128 .LcleanupEND2-.LcleanupSTART2
-	.uleb128 __condvar_cleanup1-.LSTARTCODE
-	.uleb128 0
 	.uleb128 .LcallUR-.LSTARTCODE
 	.uleb128 .LENDCODE-.LcallUR
 	.uleb128 0
--- /dev/null
+++ b/nptl/tst-cond24.c
@@ -0,0 +1,249 @@
+/* Verify that condition variables synchronized by PI mutexes don't hang.
+   Copyright (C) 2012 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
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/syscall.h>
+#include <unistd.h>
+#include <sys/time.h>
+#include <time.h>
+
+#define THREADS_NUM 5
+#define MAXITER 50000
+
+static pthread_mutex_t mutex;
+static pthread_mutexattr_t mutex_attr;
+static pthread_cond_t cond;
+static pthread_t threads[THREADS_NUM];
+static int pending = 0;
+
+typedef void * (*threadfunc) (void *);
+
+void *
+thread_fun_timed (void *arg)
+{
+  int *ret = arg;
+  int rv, i;
+
+  printf ("Started thread_fun_timed[%d]\n", *ret);
+
+  for (i = 0; i < MAXITER / THREADS_NUM; i++)
+    {
+      rv = pthread_mutex_lock (&mutex);
+      if (rv)
+        {
+	  printf ("pthread_mutex_lock: %s(%d)\n", strerror (rv), rv);
+	  *ret = 1;
+	  goto out;
+	}
+
+      while (!pending)
+	{
+	  struct timespec ts;
+	  clock_gettime(CLOCK_REALTIME, &ts);
+	  ts.tv_sec += 20;
+	  rv = pthread_cond_timedwait (&cond, &mutex, &ts);
+
+	  /* There should be no timeout either.  */
+	  if (rv)
+            {
+	      printf ("pthread_cond_wait: %s(%d)\n", strerror (rv), rv);
+	      *ret = 1;
+	      goto out;
+	    }
+	}
+
+      pending--;
+
+      rv = pthread_mutex_unlock (&mutex);
+      if (rv)
+        {
+	  printf ("pthread_mutex_unlock: %s(%d)\n", strerror (rv), rv);
+	  *ret = 1;
+	  goto out;
+	}
+    }
+
+  *ret = 0;
+
+out:
+  return ret;
+}
+
+void *
+thread_fun (void *arg)
+{
+  int *ret = arg;
+  int rv, i;
+
+  printf ("Started thread_fun[%d]\n", *ret);
+
+  for (i = 0; i < MAXITER / THREADS_NUM; i++)
+    {
+      rv = pthread_mutex_lock (&mutex);
+      if (rv)
+        {
+	  printf ("pthread_mutex_lock: %s(%d)\n", strerror (rv), rv);
+	  *ret = 1;
+	  goto out;
+	}
+
+      while (!pending)
+	{
+	  rv = pthread_cond_wait (&cond, &mutex);
+
+	  if (rv)
+            {
+	      printf ("pthread_cond_wait: %s(%d)\n", strerror (rv), rv);
+	      *ret = 1;
+	      goto out;
+	    }
+	}
+
+      pending--;
+
+      rv = pthread_mutex_unlock (&mutex);
+      if (rv)
+        {
+	  printf ("pthread_mutex_unlock: %s(%d)\n", strerror (rv), rv);
+	  *ret = 1;
+	  goto out;
+	}
+    }
+
+  *ret = 0;
+
+out:
+  return ret;
+}
+
+static int
+do_test_wait (threadfunc f)
+{
+  int i;
+  int rv;
+  int counter = 0;
+  int retval[THREADS_NUM];
+
+  puts ("Starting test");
+
+  rv = pthread_mutexattr_init (&mutex_attr);
+  if (rv)
+    {
+      printf ("pthread_mutexattr_init: %s(%d)\n", strerror (rv), rv);
+      return 1;
+    }
+
+  rv = pthread_mutexattr_setprotocol (&mutex_attr, PTHREAD_PRIO_INHERIT);
+  if (rv)
+    {
+      printf ("pthread_mutexattr_setprotocol: %s(%d)\n", strerror (rv), rv);
+      return 1;
+    }
+
+  rv = pthread_mutex_init (&mutex, &mutex_attr);
+  if (rv)
+    {
+      printf ("pthread_mutex_init: %s(%d)\n", strerror (rv), rv);
+      return 1;
+    }
+
+  rv = pthread_cond_init (&cond, NULL);
+  if (rv)
+    {
+      printf ("pthread_cond_init: %s(%d)\n", strerror (rv), rv);
+      return 1;
+    }
+
+  for (i = 0; i < THREADS_NUM; i++)
+    {
+      retval[i] = i;
+      rv = pthread_create (&threads[i], NULL, f, &retval[i]);
+      if (rv)
+        {
+          printf ("pthread_create: %s(%d)\n", strerror (rv), rv);
+          return 1;
+        }
+    }
+
+  for (; counter < MAXITER; counter++)
+    {
+      rv = pthread_mutex_lock (&mutex);
+      if (rv)
+        {
+          printf ("pthread_mutex_lock: %s(%d)\n", strerror (rv), rv);
+          return 1;
+        }
+
+      if (!(counter % 100))
+	printf ("counter: %d\n", counter);
+      pending += 1;
+
+      rv = pthread_cond_signal (&cond);
+      if (rv)
+        {
+          printf ("pthread_cond_signal: %s(%d)\n", strerror (rv), rv);
+          return 1;
+        }
+
+      rv = pthread_mutex_unlock (&mutex);
+      if (rv)
+        {
+          printf ("pthread_mutex_unlock: %s(%d)\n", strerror (rv), rv);
+          return 1;
+        }
+    }
+
+  for (i = 0; i < THREADS_NUM; i++)
+    {
+      void *ret;
+      rv = pthread_join (threads[i], &ret);
+      if (rv)
+        {
+          printf ("pthread_join: %s(%d)\n", strerror (rv), rv);
+          return 1;
+        }
+      if (ret && *(int *)ret)
+        {
+	  printf ("Thread %d returned with an error\n", i);
+	  return 1;
+	}
+    }
+
+  return 0;
+}
+
+static int
+do_test (void)
+{
+  puts ("Testing pthread_cond_wait");
+  int ret = do_test_wait (thread_fun);
+  if (ret)
+    return ret;
+
+  puts ("Testing pthread_cond_timedwait");
+  return do_test_wait (thread_fun_timed);
+}
+
+#define TIMEOUT 10
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,22 @@
+2012-10-05  Siddhesh Poyarekar  <siddhesh@redhat.com>
+
+	[BZ #14417]
+	* Makefile (tests): New test case tst-cond24.
+	(LDFLAGS-tst-cond24): Link tst-cond24 against librt.
+	* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
+	(__pthread_cond_timedwait): Unlock mutex before going back to
+	wait in PI case.
+	* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
+	(__pthread_cond_wait): Likewise.  Revert handling of EAGAIN
+	return from futex_wait.
+	* sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
+	(__pthread_cond_timedwait): Unlock mutex before going back to
+	wait in PI case.  Set requeue_pi flag only if wait returned 0.
+	* sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
+	(__pthread_cond_wait): Likewise.  Revert handling of EAGAIN
+	return from futex_wait.
+	* tst-cond24.c: New test case.
+
 2012-06-23  Thomas Schwinge  <thomas@codesourcery.com>
 
 	* sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S

--- End Message ---
--- Begin Message ---
Source: eglibc
Source-Version: 2.17-0experimental0

We believe that the bug you reported is fixed in the latest version of
eglibc, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 694962@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Adam Conrad <adconrad@0c3.net> (supplier of updated eglibc package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmaster@debian.org)


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Format: 1.8
Date: Sun, 27 Jan 2013 23:33:32 -0700
Source: eglibc
Binary: libc-bin libc-dev-bin glibc-doc eglibc-source locales locales-all nscd multiarch-support libc6 libc6-dev libc6-dbg libc6-prof libc6-pic libc6-udeb libc6.1 libc6.1-dev libc6.1-dbg libc6.1-prof libc6.1-pic libc6.1-udeb libc0.3 libc0.3-dev libc0.3-dbg libc0.3-prof libc0.3-pic libc0.3-udeb libc0.1 libc0.1-dev libc0.1-dbg libc0.1-prof libc0.1-pic libc0.1-udeb libc6-i386 libc6-dev-i386 libc6-sparc64 libc6-dev-sparc64 libc6-s390 libc6-dev-s390 libc6-s390x libc6-dev-s390x libc6-amd64 libc6-dev-amd64 libc6-powerpc libc6-dev-powerpc libc6-ppc64 libc6-dev-ppc64 libc6-mipsn32 libc6-dev-mipsn32 libc6-mips64 libc6-dev-mips64 libc6-armhf libc6-dev-armhf libc6-armel libc6-dev-armel libc0.1-i386 libc0.1-dev-i386 libc6-x32 libc6-dev-x32 libc6-i686 libc6-xen libc0.1-i686 libc0.3-i686 libc0.3-xen libc6.1-alphaev67 libc6-loongson2f libnss-dns-udeb libnss-files-udeb
Architecture: all amd64 source
Version: 2.17-0experimental0
Distribution: experimental
Urgency: low
Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
Changed-By: Adam Conrad <adconrad@0c3.net>
Closes: 694962
Launchpad-Bugs-Fixed: 929565 1088677
Description: 
 eglibc-source - Embedded GNU C Library: sources
 glibc-doc  - Embedded GNU C Library: Documentation
 libc0.1-dbg - Embedded GNU C Library: detached debugging symbols
 libc0.1-dev - Embedded GNU C Library: Development Libraries and Header Files
 libc0.1-dev-i386 - Embedded GNU C Library: 32bit development libraries for AMD64
 libc0.1    - Embedded GNU C Library: Shared libraries
 libc0.1-i386 - Embedded GNU C Library: 32bit shared libraries for AMD64
 libc0.1-i686 - Embedded GNU C Library: Shared libraries [i686 optimized]
 libc0.1-pic - Embedded GNU C Library: PIC archive library
 libc0.1-prof - Embedded GNU C Library: Profiling Libraries
 libc0.1-udeb - Embedded GNU C Library: Shared libraries - udeb (udeb)
 libc0.3-dbg - Embedded GNU C Library: detached debugging symbols
 libc0.3-dev - Embedded GNU C Library: Development Libraries and Header Files
 libc0.3    - Embedded GNU C Library: Shared libraries
 libc0.3-i686 - Embedded GNU C Library: Shared libraries [i686 optimized]
 libc0.3-pic - Embedded GNU C Library: PIC archive library
 libc0.3-prof - Embedded GNU C Library: Profiling Libraries
 libc0.3-udeb - Embedded GNU C Library: Shared libraries - udeb (udeb)
 libc0.3-xen - Embedded GNU C Library: Shared libraries [Xen version]
 libc6.1-alphaev67 - Embedded GNU C Library: Shared libraries (EV67 optimized)
 libc6.1-dbg - Embedded GNU C Library: detached debugging symbols
 libc6.1-dev - Embedded GNU C Library: Development Libraries and Header Files
 libc6.1    - Embedded GNU C Library: Shared libraries
 libc6.1-pic - Embedded GNU C Library: PIC archive library
 libc6.1-prof - Embedded GNU C Library: Profiling Libraries
 libc6.1-udeb - Embedded GNU C Library: Shared libraries - udeb (udeb)
 libc6-amd64 - Embedded GNU C Library: 64bit Shared libraries for AMD64
 libc6-armel - Embedded GNU C Library: ARM softfp shared libraries for armhf
 libc6-armhf - Embedded GNU C Library: ARM hard float shared libraries for armel
 libc6-dbg  - Embedded GNU C Library: detached debugging symbols
 libc6-dev-amd64 - Embedded GNU C Library: 64bit Development Libraries for AMD64
 libc6-dev-armel - Embedded GNU C Library: ARM softfp development libraries for armh
 libc6-dev-armhf - Embedded GNU C Library: ARM hard float development libraries for
 libc6-dev  - Embedded GNU C Library: Development Libraries and Header Files
 libc6-dev-i386 - Embedded GNU C Library: 32-bit development libraries for AMD64
 libc6-dev-mips64 - Embedded GNU C Library: 64bit Development Libraries for MIPS64
 libc6-dev-mipsn32 - Embedded GNU C Library: n32 Development Libraries for MIPS64
 libc6-dev-powerpc - Embedded GNU C Library: 32bit powerpc development libraries for p
 libc6-dev-ppc64 - Embedded GNU C Library: 64bit Development Libraries for PowerPC64
 libc6-dev-s390 - Embedded GNU C Library: 32bit Development Libraries for IBM zSeri
 libc6-dev-s390x - Embedded GNU C Library: 64bit Development Libraries for IBM zSeri
 libc6-dev-sparc64 - Embedded GNU C Library: 64bit Development Libraries for UltraSPAR
 libc6-dev-x32 - Embedded GNU C Library: X32 ABI Development Libraries for AMD64
 libc6      - Embedded GNU C Library: Shared libraries
 libc6-i386 - Embedded GNU C Library: 32-bit shared libraries for AMD64
 libc6-i686 - Embedded GNU C Library: Shared libraries [i686 optimized]
 libc6-loongson2f - Embedded GNU C Library: Shared libraries (Loongson 2F optimized)
 libc6-mips64 - Embedded GNU C Library: 64bit Shared libraries for MIPS64
 libc6-mipsn32 - Embedded GNU C Library: n32 Shared libraries for MIPS64
 libc6-pic  - Embedded GNU C Library: PIC archive library
 libc6-powerpc - Embedded GNU C Library: 32bit powerpc shared libraries for ppc64
 libc6-ppc64 - Embedded GNU C Library: 64bit Shared libraries for PowerPC64
 libc6-prof - Embedded GNU C Library: Profiling Libraries
 libc6-s390 - Embedded GNU C Library: 32bit Shared libraries for IBM zSeries
 libc6-s390x - Embedded GNU C Library: 64bit Shared libraries for IBM zSeries
 libc6-sparc64 - Embedded GNU C Library: 64bit Shared libraries for UltraSPARC
 libc6-udeb - Embedded GNU C Library: Shared libraries - udeb (udeb)
 libc6-x32  - Embedded GNU C Library: X32 ABI Shared libraries for AMD64
 libc6-xen  - Embedded GNU C Library: Shared libraries [Xen version]
 libc-bin   - Embedded GNU C Library: Binaries
 libc-dev-bin - Embedded GNU C Library: Development binaries
 libnss-dns-udeb - Embedded GNU C Library: NSS helper for DNS - udeb (udeb)
 libnss-files-udeb - Embedded GNU C Library: NSS helper for files - udeb (udeb)
 locales-all - Embedded GNU C Library: Precompiled locale data
 locales    - Embedded GNU C Library: National Language (locale) data [support]
 multiarch-support - Transitional package to ensure multiarch compatibility
 nscd       - Embedded GNU C Library: Name Service Cache Daemon
Changes: 
 eglibc (2.17-0experimental0) experimental; urgency=low
 .
   [ Adam Conrad ]
   * New upstream release: version 2.17, orig tarball built at SVN r22169:
     - Restricts ld.so self-loading checks to normal mode (LP: #1088677)
     - debian/rules.d/tarball.mk: ports is no longer external to libc.
     - debian/*: Update all 2.16 occurences to 2.17 for upgrades/deps.
     - patches/localedata/supported.diff: Rebased against new upstream.
     - patches/localedata/locale-ia.diff: Dropped, merged upstream.
     - patches/localedata/submitted-es_MX-decimal_point.diff: Rebased.
     - patches/amd64/local-pthread_cond_wait.diff: Dropped, fixed upstream.
     - patches/i386/local-pthread_cond_wait.diff: Dropped (closes: #694962)
     - patches/arm64/cvs-ldconfig-cache-abi.diff: Dropped, merged upstream.
     - patches/arm64/submitted-aarch64-support.diff: Merged upstream.
     - patches/arm/cvs-ldconfig-cache-abi.diff: Dropped, merged upstream.
     - patches/arm/local-atomic.diff: Dropped, fixed differently upstream.
     - patches/arm/unsubmitted-armhf-linker.diff: Dropped, not needed.
     - patches/arm/unsubmitted-ldconfig-cache-abi.diff: Rewritten slightly.
     - patches/hppa/submitted-nptl-carlos.diff: Rebased against upstream.
     - patches/hppa/local-stack-grows-up.diff: Rebased against upstream.
     - patches/hurd-i386/local-enable-ldconfig.diff: dl-cache.c dropped.
     - patches/hurd-i386/tg-tls.diff: Rebase and drop powerpc support.
     - patches/hurd-i386/tg-regenerate_errno.h.diff: Merged upstream.
     - patches/hurd-i386/tg-extern_inline.diff: Drop powerpc support.
     - patches/hurd-i386/tg-elfosabi_gnu.diff: Drop powerpc support.
     - patches/hurd-i386/tg-grantpt.diff: Rebased against new upstream.
     - patches/hurd-i386/unsubmitted-pthread_posix-option.diff: Rebased.
     - patches/hurd-i386/submitted-getgroups.diff: Dropped, merged upstream.
     - patches/hurd-i386/submitted-getlogin_r.diff: Dropped, fixed upstream.
     - patches/hurd-i386/submitted-ptsname.diff: Dropped, merged upstream.
     - patches/hurd-i386/submitted-sendto.diff: Dropped, fixed upstream.
     - patches/hurd-i386/cvs-add-missing-includes.diff: Merged upstream.
     - patches/hurd-i386/cvs-mach-check-local-headers.sh.diff: Merged.
     - patches/hurd-i386/cvs-lremovexattr.diff: Dropped, merged upstream.
     - patches/hurd-i386/cvs-renameat.diff: Dropped, merged upstream.
     - patches/hurd-i386/cvs-mknodat.diff: Dropped, merged upstream.
     - patches/hurd-i386/cvs-llistxattr.diff: Dropped, merged upstream.
     - patches/i386/submitted-i686-timing.diff: Rebase, and fix a bug that
       was excluding dl-caller.c from shared-only-routines for rtld builds.
     - patches/m68k/cvs-syscall-arguments.diff: Dropped, merged upstream.
     - patches/powerpc/local-math-logb.diff: Rebased against new upstream.
     - patches/all/unsubmitted-autoconfupdate.diff: Dropped, not needed.
     - patches/any/local-bindresvport_blacklist.diff: Rebase with upstream.
     - patches/any/local-ldso-disable-hwcap.diff: Rebased against upstream.
     - patches/any/local-libgcc-compat-ports.diff: Rebased against upstream.
     - patches/any/local-nss-upgrade.diff: Rebased against new upstream.
     - patches/any/local-o_cloexec.diff: Rebased against new upstream.
     - patches/any/local-rtld.diff: Rebased against new upstream.
     - patches/any/submitted-popen.diff: Dropped, finally merged upstream.
     - patches/any/submitted-accept4-hidden.diff: Dropped, merged upstream.
     - patches/any/submitted-bits-fcntl_h-at.diff: Rebased against upstream.
     - patches/any/local-gai-rfc1918-scope-global.patch: Merged upstream.
     - patches/any/submitted-resolv-assert.diff: Dropped, merged upstream.
     - patches/any/local-revert-fclose-posix2008.diff: Reverted upstream.
     - patches/any/local-sunrpc-dos.diff: Dropped, different fix upstream.
     - patches/any/cvs-cxxheaders-detection[123].diff: Merged upstream.
   * debian/patches/powerpc/submitted-UAPI_ASM_POWERPC_ELF.diff: Remove,
     as this has been fixed in the 3.7 release and 3.8 kernel headers.
   * debian/sysdeps/{amd64,i386}.mk: Fix rtlddir for x32 alternate builds.
   * debian/sysdeps/{armel,armhf}.mk: Merge multilib configs from Ubuntu.
   * debian/debhelper.in/libc.preinst: Fix preinst kernel check to match
     the reality that we need >= 2.6.32, as found in squeeze/lucid/RHEL6.
   * debian/rules: Fix EGLIBC_VERSION epoch parsing breakage (LP: #929565)
   * debian/patches/any/cvs-tst-array-as-needed.diff: Fix tst-array2 and
     tst-array5 to build with --no-as-needed to prevent test regressions.
   * debian/patches/any/unsubmitted-ldso-machine-mismatch.diff: Skip past
     libraries that are built for other machines, rather than erroring.
   * debian/patches/i386/unsubmitted-quiet-ldconfig.diff: Fix ldconfig on
     x86 to stop complaining so loudly about wrong-arch libraries on path.
   * debian/{rules.d/build.mk,sysdeps/hurd*}: When the threads variable is
     not set to "yes", add --disable-nscd to the main configure options.
   * debian/patches/any/cvs-use-glibc-wchar.diff: Switch from the eglibc
     implementation of wchar.h to the cleaner glibc-2.18 implementation.
   * debian/patches/arm/local-eabi-wchar.diff: Dropped, no longer needed.
   * debian/patches/any/local-tst-dir-overlayfs.diff: Apply dirty hack to
     skip tst-dir on overlayfs, as it currently fails (see: LP #1107492)
   * debian/patches/svn-updates.diff: Bring svn-updates to revision 22169.
 .
   [ Matthias Klose ]
   * debian/{rules,rules.d/control.mk,control.in/libc}: Allow turning off
     libc-prof arbitrarily, and disable it for arm64, which lacks support.
   * debian/rules.d/build.mk: Fix armhf multilib with WITH_BUILD_SYSROOT.
 .
   [ Steve McIntyre ]
   * debian/patches/arm/unsubmitted-ldso-multilib.diff: Stop ld.so from
     exiting prematurely when it encounters wrong-float ABI libraries.
 .
   [ Pino Toscano ]
   * Rebase/remove hurd-i386 patches against the new upstream version:
     - patches/hurd-i386/tg-ptrmangle.diff: Remove, obsolete.
     - patches/hurd-i386/tg-check_native.diff: Remove, obsolete.
     - patches/hurd-i386/submitted-regex_internal.diff: Fixed upstream.
     - patches/hurd-i386/local-disable-sendmmsg.diff: Fixed upstream.
     - patches/hurd-i386/unsubmitted-pthread.diff: Drop, obsolete.
     - patches/hurd-i386/unsubmitted-mremap.diff: Rebased for new upstream.
   * debian/patches/hurd-i386/local-disable-tst-xmmymm.diff: Disable test.
   * Update expected-results-i486-gnu-libc, expected-results-i686-gnu-i386,
     expected-results-i686-gnu-i686, expected-results-i686-gnu-xen.
Checksums-Sha1: 
 5493194449d33f571b931fe22ca60302b40d97a0 5290 eglibc_2.17-0experimental0.dsc
 1ad4f2f403d987c96020feac1ccbe85f1da12f80 11655100 eglibc_2.17.orig.tar.xz
 7fe005215bd9a89f29f7d64e75d25a02bd3709a2 759864 eglibc_2.17-0experimental0.debian.tar.xz
 76d1291954bcda117bc91971eef4575a2e89242d 2120908 glibc-doc_2.17-0experimental0_all.deb
 6a38b4ba3e4410b4b4559ca38c0168dddf4ce2e4 13850908 eglibc-source_2.17-0experimental0_all.deb
 0c6b4bdbe21c0c78a6c2e1d23e93ac9e07ddda58 3831222 locales_2.17-0experimental0_all.deb
 1b458068b4d247fed625262d0c92fc7cde41cc34 4604064 libc6_2.17-0experimental0_amd64.deb
 eb49385bf44d2af63c7f99d4925ac6eb8c98e614 3110508 libc6-dev_2.17-0experimental0_amd64.deb
 29923a6ab328ed7886f1562b09d6d463939145b7 1435792 libc6-pic_2.17-0experimental0_amd64.deb
 50420da804420afaf89a1b6f64335fc734269a34 1290040 libc-bin_2.17-0experimental0_amd64.deb
 784db3c0d0b97aae04ea285117e5acf7e5876716 229606 libc-dev-bin_2.17-0experimental0_amd64.deb
 1f67a0d41b3b6a1f89ff9713659f3b12a220f839 156586 multiarch-support_2.17-0experimental0_amd64.deb
 1745b4c7827a212ce657f55a9501ead55d0035dc 1552050 libc6-prof_2.17-0experimental0_amd64.deb
 44e43aaeb8017b8a4180ccdf3bda51898941761d 3169806 locales-all_2.17-0experimental0_amd64.deb
 54093706cc9ce4c01ec4b91ce40847b1eee67c3d 4112188 libc6-i386_2.17-0experimental0_amd64.deb
 c3be0c084ff955cefff11ab5e1fb6acd60dcdbbd 1796226 libc6-dev-i386_2.17-0experimental0_amd64.deb
 9089accd4585ab271f10e428229a271302911f86 4520278 libc6-x32_2.17-0experimental0_amd64.deb
 2a4ad32476723cfe3a1f69ce11d3694639ea5855 2515450 libc6-dev-x32_2.17-0experimental0_amd64.deb
 adaea6f9a1d6c08350ea94f714aa1bb9f886272f 230766 nscd_2.17-0experimental0_amd64.deb
 14727e2beef0fa2bc933883cc841d41b0c102e54 5920200 libc6-dbg_2.17-0experimental0_amd64.deb
 ba085dd356d218f76e4529dcd35ee90f5fb6cfbb 1046722 libc6-udeb_2.17-0experimental0_amd64.udeb
 47df4e468c9cec92bae8333c6bb048fda3e09d95 10130 libnss-dns-udeb_2.17-0experimental0_amd64.udeb
 987b13fb88c0fb746964bdb40026fe7130c4700d 16632 libnss-files-udeb_2.17-0experimental0_amd64.udeb
Checksums-Sha256: 
 dfe80862081dc4ed9329cee62e8f37be914a893371bc3dcf72db411fc779cd6e 5290 eglibc_2.17-0experimental0.dsc
 8901e71e395993034a786e47c9fcdac6c01f10fcf9dd4357c55093f3b778a63a 11655100 eglibc_2.17.orig.tar.xz
 a2fee98d5318038051774733a7ca40b0a1e0bc292d44e8cc719e8a2f1eb9a0ef 759864 eglibc_2.17-0experimental0.debian.tar.xz
 8cbdcc6f7335e30838e26618228b212a4320ac01f0cf9ab61445f076c5ddfad9 2120908 glibc-doc_2.17-0experimental0_all.deb
 6012c4db4807ea17a2f317d51466eeadde921c3d16bd92a86dcefc632a9c02df 13850908 eglibc-source_2.17-0experimental0_all.deb
 60c87979eb87590db11f03ebbead12a0045147b54819f86e0ac95a03f4dac5c9 3831222 locales_2.17-0experimental0_all.deb
 88d1b63b11eabf829fffae351c6789998ac52d2e4392690ee5d3022ae9a414be 4604064 libc6_2.17-0experimental0_amd64.deb
 4c7ba61dd1e2f1584217c7cb605e73af4b2ee458a388d7c016acd5774c91d1bd 3110508 libc6-dev_2.17-0experimental0_amd64.deb
 8147de449ec0f2951164233e67ef5bfd01a8ac8747d6a68934edb01ff9f93794 1435792 libc6-pic_2.17-0experimental0_amd64.deb
 087d4c430fd1fb5ffe1350f248ef5e73121720788e839fe7312cf8fe2ad044db 1290040 libc-bin_2.17-0experimental0_amd64.deb
 5f2c196b42ccc636617226c3c7d847ad745657ca48a63fe1a0e970df381f43b4 229606 libc-dev-bin_2.17-0experimental0_amd64.deb
 1705927bdc62ae717a74c87a85edebe7340d5a6c3f1245bffa9d7713e26059d8 156586 multiarch-support_2.17-0experimental0_amd64.deb
 ea2e9983be2ca99ca40c3baa620f0d63ed58e5e283f2b59590963cd32e51aa7a 1552050 libc6-prof_2.17-0experimental0_amd64.deb
 45ef56897a1667fca4a4823e827994e5e2ef976ae206a603e7eee07dcd416a48 3169806 locales-all_2.17-0experimental0_amd64.deb
 9abad57e6ebc9c6d4c7f01444be2b739f728d9ae9ffc8f9aef8adffaa26689d6 4112188 libc6-i386_2.17-0experimental0_amd64.deb
 012f26bba63018a72b63ced65f4a626de30034976311773e456e343a8c116e5e 1796226 libc6-dev-i386_2.17-0experimental0_amd64.deb
 e90cb401feb576aac0a3147c769ec3ac4bcdac8c67fbf3cbca2b9f8b808e002a 4520278 libc6-x32_2.17-0experimental0_amd64.deb
 e6276915a9a8fa6a81f2bbb2791bb8d76d1067c40d45029c87578775224fa406 2515450 libc6-dev-x32_2.17-0experimental0_amd64.deb
 959776c0cc045e513b0912ab295e96afaca726ce2c0fa93ecc36fd4cbcd427cd 230766 nscd_2.17-0experimental0_amd64.deb
 0305d4f08f2a6bba5ea48fd469287f0c558ec11b86b608ff3d3e0b959441fa84 5920200 libc6-dbg_2.17-0experimental0_amd64.deb
 9111342899f3551526df4d11366d7b9323fa71e354605ffb0a2c18be386f2a78 1046722 libc6-udeb_2.17-0experimental0_amd64.udeb
 9df1653a844eee94714061ca931368cd03d477fd89059096eb5ae75668f058f6 10130 libnss-dns-udeb_2.17-0experimental0_amd64.udeb
 b90a52187ee7504832faff25b66fe180df7681569d906324593f7ee608239a9b 16632 libnss-files-udeb_2.17-0experimental0_amd64.udeb
Files: 
 b526f0b54e9b812d1ba9546bf7a5f157 5290 libs required eglibc_2.17-0experimental0.dsc
 9121f7d3ea2907ce2355cb8e184199ea 11655100 libs required eglibc_2.17.orig.tar.xz
 1e2d736a37f1400686705de474fadbb9 759864 libs required eglibc_2.17-0experimental0.debian.tar.xz
 7795e5aece15ae8e404aa7013888592a 2120908 doc optional glibc-doc_2.17-0experimental0_all.deb
 80b529136482d01262f81346d8ca1652 13850908 devel optional eglibc-source_2.17-0experimental0_all.deb
 71d42637550ff0ab1d0212fca804f22b 3831222 localization standard locales_2.17-0experimental0_all.deb
 d5bc2cc6a01984a6a89d46c3a701b9fd 4604064 libs required libc6_2.17-0experimental0_amd64.deb
 ee135d5eb518e6304ff44850a9aecc54 3110508 libdevel optional libc6-dev_2.17-0experimental0_amd64.deb
 f354234b25aad5d0327c30895c5ad65d 1435792 libdevel optional libc6-pic_2.17-0experimental0_amd64.deb
 8f3d5305dd8334b6edc16bd6d013133d 1290040 libs required libc-bin_2.17-0experimental0_amd64.deb
 3c0a9141f3a8d957911fe9b9d91fb8c3 229606 libdevel optional libc-dev-bin_2.17-0experimental0_amd64.deb
 576420e893466ca3f9530117216863fb 156586 libs required multiarch-support_2.17-0experimental0_amd64.deb
 f19677e7888c21a7698f9f9b56a099de 1552050 libdevel extra libc6-prof_2.17-0experimental0_amd64.deb
 d53ad4ba8d3dd1416ab78d5892545cb4 3169806 localization extra locales-all_2.17-0experimental0_amd64.deb
 281cad1da7e1288f439fee4fc30e3af6 4112188 libs optional libc6-i386_2.17-0experimental0_amd64.deb
 315d9869bde7acbe4a1ca98ece77db06 1796226 libdevel optional libc6-dev-i386_2.17-0experimental0_amd64.deb
 58ca4ed6c26b47c3c883469b28bd134f 4520278 libs optional libc6-x32_2.17-0experimental0_amd64.deb
 0525286aa27a3b374bed017bff234374 2515450 libdevel optional libc6-dev-x32_2.17-0experimental0_amd64.deb
 9b99895c97e72121dc228a690209096c 230766 admin optional nscd_2.17-0experimental0_amd64.deb
 91c9f4fd152272b366e08ec412909be4 5920200 debug extra libc6-dbg_2.17-0experimental0_amd64.deb
 258809b9f6b96aab65010c4a3caf932f 1046722 debian-installer extra libc6-udeb_2.17-0experimental0_amd64.udeb
 10c514ac5e3c205a48767719b56bed03 10130 debian-installer extra libnss-dns-udeb_2.17-0experimental0_amd64.udeb
 af16d153e2b68d29dc3ee58102266d99 16632 debian-installer extra libnss-files-udeb_2.17-0experimental0_amd64.udeb

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)

iEYEARECAAYFAlEGM/0ACgkQvjztR8bOoMlypgCfa5Pa3IhVmnwQsUR1qH8udtZm
dJ4AoI5jRfz5rA2MpO6YIOOJS+1WPZQL
=e/s/
-----END PGP SIGNATURE-----

--- End Message ---

Reply to: