diff options
author | Flemmard <flemmard@gmail.com> | 2014-03-10 20:18:45 +0100 |
---|---|---|
committer | Gerrit Code Review <gerrit2@gerrit> | 2014-06-30 19:01:33 +0200 |
commit | 60bf94ec27a04dfee53b16e9a7e40f1e599b6d00 (patch) | |
tree | 255845dae9703d57e194617b4ef2eb3d7db75d50 | |
parent | libdl should also be linked to binary (diff) | |
download | android_bootable_recovery-60bf94ec27a04dfee53b16e9a7e40f1e599b6d00.tar android_bootable_recovery-60bf94ec27a04dfee53b16e9a7e40f1e599b6d00.tar.gz android_bootable_recovery-60bf94ec27a04dfee53b16e9a7e40f1e599b6d00.tar.bz2 android_bootable_recovery-60bf94ec27a04dfee53b16e9a7e40f1e599b6d00.tar.lz android_bootable_recovery-60bf94ec27a04dfee53b16e9a7e40f1e599b6d00.tar.xz android_bootable_recovery-60bf94ec27a04dfee53b16e9a7e40f1e599b6d00.tar.zst android_bootable_recovery-60bf94ec27a04dfee53b16e9a7e40f1e599b6d00.zip |
-rw-r--r-- | fuse/fuse.c | 4 | ||||
-rw-r--r-- | fuse/fuse_loop_mt.c | 9 |
2 files changed, 13 insertions, 0 deletions
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) |