This is the mail archive of the
glibc-bugs@sourceware.org
mailing list for the glibc project.
[Bug build/13844] New: `nptl/sysdeps/unix/sysv/linux/sparc/sparc32/libc-lowlevellock.c' missing in glibc sources
- From: "ilmalakhov at yandex dot ru" <sourceware-bugzilla at sourceware dot org>
- To: glibc-bugs at sources dot redhat dot com
- Date: Wed, 14 Mar 2012 13:05:36 +0000
- Subject: [Bug build/13844] New: `nptl/sysdeps/unix/sysv/linux/sparc/sparc32/libc-lowlevellock.c' missing in glibc sources
- Auto-submitted: auto-generated
http://sourceware.org/bugzilla/show_bug.cgi?id=13844
Bug #: 13844
Summary: `nptl/sysdeps/unix/sysv/linux/sparc/sparc32/libc-lowle
vellock.c' missing in glibc sources
Product: glibc
Version: unspecified
Status: NEW
Severity: normal
Priority: P2
Component: build
AssignedTo: unassigned@sourceware.org
ReportedBy: ilmalakhov@yandex.ru
CC: carlos@systemhalted.org
Classification: Unclassified
Hi.
Because of the absence of the sparc32-linux specific version of this file,
`nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c' is fetched when building
`libc-lowlevellock.o{,s}'. The latter contains just
. . .
#include "lowlevellock.c"
which leads to `nptl/sysdeps/unix/sysv/linux/lowlevellock.c' being actually
compiled instead of
`nptl/sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c'.
As a consequence a futex can be accessed in a non-atomic way when using libc's
internal locks, e.g. when performing output to the same stream from different
threads.
For example, when the following test is run on a V8 host, this typically leads
to a deadlock when all threads are waiting for a futex to become free and there
is no one to release it. This happens particularly soon when it's executed this
way at a multi-CPU host:
$ ./test.sparc32 5 > /dev/null
$ cat test.c
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
void *
handler (void *arg)
{
for (;;)
printf ("Thread #%ld\n", (long) arg);
return NULL;
}
int
main (int argc, char **argv)
{
size_t i;
size_t nthreads = (size_t) atoi (argv[1]);
pthread_t *threads = (pthread_t *) malloc (nthreads * sizeof (pthread_t));
for (i = 0; i < nthreads; i++)
pthread_create (&threads[i], NULL, handler, (void *) i);
for (i = 0; i < nthreads; i++)
pthread_join (threads[i], NULL);
free (threads);
return 0;
}
--
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.