From 60bf94ec27a04dfee53b16e9a7e40f1e599b6d00 Mon Sep 17 00:00:00 2001 From: Flemmard Date: Mon, 10 Mar 2014 20:18:45 +0100 Subject: on stock android, pthread_cancel and phtread_setcancelstate doesn't exist Change-Id: Icbe281a301004ae2bcda4821a50fb4a41088e85d --- fuse/fuse.c | 4 ++++ fuse/fuse_loop_mt.c | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/fuse/fuse.c b/fuse/fuse.c index 34b11d47a..588d44533 100644 --- a/fuse/fuse.c +++ b/fuse/fuse.c @@ -4579,7 +4579,11 @@ void fuse_stop_cleanup_thread(struct fuse *f) { if (lru_enabled(f)) { pthread_mutex_lock(&f->lock); +#ifndef ANDROID pthread_cancel(f->prune_thread); +#else + pthread_kill(f->prune_thread, SIGUSR1); +#endif pthread_mutex_unlock(&f->lock); pthread_join(f->prune_thread, NULL); } diff --git a/fuse/fuse_loop_mt.c b/fuse/fuse_loop_mt.c index 7e400c2a4..aefc3ec98 100644 --- a/fuse/fuse_loop_mt.c +++ b/fuse/fuse_loop_mt.c @@ -81,9 +81,13 @@ static void *fuse_do_work(void *data) }; int res; +#ifndef ANDROID pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); +#endif res = fuse_session_receive_buf(mt->se, &fbuf, &ch); +#ifndef ANDROID pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL); +#endif if (res == -EINTR) continue; if (res <= 0) { @@ -245,8 +249,13 @@ int fuse_session_loop_mt(struct fuse_session *se) while (!fuse_session_exited(se)) sem_wait(&mt.finish); +#ifndef ANDROID for (w = mt.main.next; w != &mt.main; w = w->next) pthread_cancel(w->thread_id); +#else + for (w = mt.main.next; w != &mt.main; w = w->next) + pthread_kill(w->thread_id, SIGUSR1); +#endif mt.exit = 1; while (mt.main.next != &mt.main) -- cgit v1.2.3