mirror of
git://sourceware.org/git/glibc.git
synced 2026-09-08 23:58:31 +08:00
nptl: Fix nptl/tst-cancel31 fail sometimes
tst-cancel31 fail on la32 qemu-system with a single-core system sometimes. IF the test and a infinite loop run on a same x86_64 core, the test also fail sometimes. taskset -c 0 make test t=nptl/tst-cancel31 taskset -c 0 ./a.out (a.out is a infinite loop) After writeopener thread opens the file, it may switch to main thread and find redundant files. pthread_cancel and pthread_join writeopener thread before support_descriptors_check. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
This commit is contained in:
committed by
Carlos O'Donell
parent
9f5f18aab4
commit
47b306376c
+6
-1
@@ -43,7 +43,9 @@ writeopener (void *arg)
|
||||
for (;;)
|
||||
{
|
||||
fd = open (arg, O_WRONLY);
|
||||
pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, 0);
|
||||
xclose (fd);
|
||||
pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, 0);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@@ -74,7 +76,7 @@ do_test (void)
|
||||
|
||||
srand (1);
|
||||
|
||||
xpthread_create (NULL, writeopener, name);
|
||||
pthread_t tw = xpthread_create (NULL, writeopener, name);
|
||||
for (int i = 0; i < iter_count; i++)
|
||||
{
|
||||
pthread_t td = xpthread_create (NULL, leaker, name);
|
||||
@@ -88,6 +90,9 @@ do_test (void)
|
||||
xpthread_join (td);
|
||||
}
|
||||
|
||||
pthread_cancel (tw);
|
||||
xpthread_join (tw);
|
||||
|
||||
support_descriptors_check (descrs);
|
||||
|
||||
support_descriptors_free (descrs);
|
||||
|
||||
Reference in New Issue
Block a user