[PATCH] nptl: Fix nptl/tst-cancel31 fail sometimes
mengqinggang
mengqinggang@loongson.cn
Tue Mar 24 07:48:38 GMT 2026
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.
---
nptl/tst-cancel31.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/nptl/tst-cancel31.c b/nptl/tst-cancel31.c
index e9ffef3b41..8909879ff4 100644
--- a/nptl/tst-cancel31.c
+++ b/nptl/tst-cancel31.c
@@ -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);
--
2.34.1
More information about the Libc-alpha
mailing list