0
0
mirror of https://github.com/termux/termux-packages.git synced 2024-11-13 14:09:19 +00:00
termux-packages/root-packages/libfuse3/test-test_setattr.c.patch
Tee KOBAYASHI 78a624ab54 libfuse3: Use negative logic for pthread cancelation
to avoid race condition.
2022-12-13 13:23:32 +00:00

45 lines
1.2 KiB
Diff

--- a/test/test_setattr.c
+++ b/test/test_setattr.c
@@ -20,6 +20,7 @@
#include <stddef.h>
#include <unistd.h>
#include <pthread.h>
+#include <fuse_i.h>
#ifndef __linux__
#include <limits.h>
@@ -128,6 +129,15 @@ static struct fuse_lowlevel_ops tfs_oper = {
static void* run_fs(void *data) {
struct fuse_session *se = (struct fuse_session*) data;
assert(fuse_session_loop(se) == 0);
+
+ if (atomic_flag_test_and_set(&se->cancel)) {
+ *se->retval = 1;
+ pthread_exit((void *)se->retval);
+ }
+
+ atomic_flag_clear(&se->cancel);
+ *se->retval = 0;
+
return NULL;
}
@@ -164,13 +174,16 @@ int main(int argc, char *argv[]) {
assert(fuse_session_mount(se, fuse_opts.mountpoint) == 0);
/* Start file-system thread */
+ atomic_flag_test_and_set(&se->cancel);
assert(pthread_create(&fs_thread, NULL, run_fs, (void *)se) == 0);
/* Do test */
test_fs(fuse_opts.mountpoint);
/* Stop file system */
- assert(pthread_cancel(fs_thread) == 0);
+ assert(pthread_join(fs_thread, (void **)&se->retval) == 0);
+ assert(*se->retval == 1);
+ assert(atomic_flag_test_and_set(&se->cancel) == 1);
fuse_session_unmount(se);
assert(got_fh == 1);