summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog2
-rw-r--r--lib/helper.c14
2 files changed, 16 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index d18888d..0990310 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;
}