mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-09 23:00:07 +00:00
Fix aliasing problem in tst-sem11.
This commit is contained in:
parent
3005703bb9
commit
9c04f7c155
@ -1,5 +1,7 @@
|
||||
2009-10-30 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* tst-sem11.c (main): Rewrite to avoid aliasing problems.
|
||||
|
||||
[BZ #3270]
|
||||
* allocatestack.c (__nptl_setxid): Perform the operation in multiple
|
||||
steps to avoid races with creation and terminations.
|
||||
|
@ -23,23 +23,25 @@ main (void)
|
||||
{
|
||||
int tries = 5;
|
||||
pthread_t th;
|
||||
sem_t s;
|
||||
union
|
||||
{
|
||||
sem_t s;
|
||||
struct new_sem ns;
|
||||
} u;
|
||||
again:
|
||||
if (sem_init (&s, 0, 0) != 0)
|
||||
if (sem_init (&u.s, 0, 0) != 0)
|
||||
{
|
||||
puts ("sem_init failed");
|
||||
return 1;
|
||||
}
|
||||
|
||||
struct new_sem *is = (struct new_sem *) &s;
|
||||
|
||||
if (is->nwaiters != 0)
|
||||
if (u.ns.nwaiters != 0)
|
||||
{
|
||||
puts ("nwaiters not initialized");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (pthread_create (&th, NULL, tf, &s) != 0)
|
||||
if (pthread_create (&th, NULL, tf, &u.s) != 0)
|
||||
{
|
||||
puts ("pthread_create failed");
|
||||
return 1;
|
||||
@ -62,11 +64,11 @@ main (void)
|
||||
if (r != PTHREAD_CANCELED && --tries > 0)
|
||||
{
|
||||
/* Maybe we get the scheduling right the next time. */
|
||||
sem_destroy (&s);
|
||||
sem_destroy (&u.s);
|
||||
goto again;
|
||||
}
|
||||
|
||||
if (is->nwaiters != 0)
|
||||
if (u.ns.nwaiters != 0)
|
||||
{
|
||||
puts ("nwaiters not reset");
|
||||
return 1;
|
||||
|
Loading…
Reference in New Issue
Block a user