diff options
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | lib/helper.c | 14 |
2 files changed, 16 insertions, 0 deletions
@@ -2,6 +2,8 @@ Unreleased Changes ================== * Added SELinux support. +* Fixed race-condition when session is terminated right after starting + a FUSE file system. FUSE 2.9.6 (2016-04-23) ======================= diff --git a/lib/helper.c b/lib/helper.c index b644012..49d30f9 100644 --- a/lib/helper.c +++ b/lib/helper.c @@ -181,6 +181,13 @@ int fuse_daemonize(int foreground) { if (!foreground) { int nullfd; + int waiter[2]; + char completed; + + if (pipe(waiter)) { + perror("fuse_daemonize: pipe"); + return -1; + } /* * demonize current process by forking it and killing the @@ -193,6 +200,7 @@ int fuse_daemonize(int foreground) case 0: break; default: + read(waiter[0], &completed, sizeof(completed)); _exit(0); } @@ -211,6 +219,12 @@ int fuse_daemonize(int foreground) if (nullfd > 2) close(nullfd); } + + /* Propagate completion of daemon initializatation */ + completed = 1; + write(waiter[1], &completed, sizeof(completed)); + close(waiter[0]); + close(waiter[1]); } return 0; } |