summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Szeredi <miklos@szeredi.hu>2005-03-09 09:23:06 +0000
committerMiklos Szeredi <miklos@szeredi.hu>2005-03-09 09:23:06 +0000
commit80a5a938a95dbd9b830984415e4a20f62ab2872e (patch)
tree09916a49709bedd2ea13ef17fdf51b7d453b7dd3
parent5fba5cdbb8f4002479362e52278fa59aa14d43e0 (diff)
downloadfuse-80a5a938a95dbd9b830984415e4a20f62ab2872e.tar.gz
-rw-r--r--ChangeLog9
-rw-r--r--example/Makefile.am2
-rw-r--r--lib/fuse_mt.c6
3 files changed, 15 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 15835f5..814289a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,14 @@
-2005-03-05 Miklos Szeredi <miklos@szeredi.hu>
+2005-03-08 Miklos Szeredi <miklos@szeredi.hu>
* Released 2.2.1
+2005-03-08 Miklos Szeredi <miklos@szeredi.hu>
+
+ * examples: add -lpthread to link flags to work around valgrind
+ quirk
+
+ * lib: don't exit threads, so cancelation doesn't cause segfault
+
2005-03-04 Miklos Szeredi <miklos@szeredi.hu>
* kernel: fix nasty bug which could cause an Oops under certain
diff --git a/example/Makefile.am b/example/Makefile.am
index 475cabf..e8c8a6d 100644
--- a/example/Makefile.am
+++ b/example/Makefile.am
@@ -6,4 +6,4 @@ fusexmp_SOURCES = fusexmp.c
null_SOURCES = null.c
hello_SOURCES = hello.c
-LDADD = ../lib/libfuse.la
+LDADD = ../lib/libfuse.la -lpthread
diff --git a/lib/fuse_mt.c b/lib/fuse_mt.c
index 2e43671..819a2b9 100644
--- a/lib/fuse_mt.c
+++ b/lib/fuse_mt.c
@@ -12,6 +12,7 @@
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
+#include <unistd.h>
#include <signal.h>
#include <errno.h>
#include <sys/time.h>
@@ -36,6 +37,7 @@ static void *do_work(void *data)
struct fuse_worker *w = (struct fuse_worker *) data;
struct fuse *f = w->f;
struct fuse_context *ctx;
+ int is_mainthread = (f->numworker == 1);
ctx = (struct fuse_context *) malloc(sizeof(struct fuse_context));
if (ctx == NULL) {
@@ -83,6 +85,10 @@ static void *do_work(void *data)
w->proc(w->f, cmd, w->data);
}
+ /* Wait for cancellation */
+ if (!is_mainthread)
+ pause();
+
return NULL;
}