Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Added a daemonize() function to account for certain conditions where …

…the forked process would still die (e.g. if mounted as a home directory and the user logs in multiple times).
  • Loading branch information...
commit 39b9a017017c805f0421f9d8b55788ccb1ec8516 1 parent 5db1052
@LinuxMercedes LinuxMercedes authored demonfoo committed
Showing with 21 additions and 11 deletions.
  1. +21 −11 examples/loopback.pl
View
32 examples/loopback.pl
@@ -175,6 +175,25 @@ sub x_statfs {
}
return 255,1000000,500000,1000000,500000,4096;
}
+
+# Required for some edge cases where a simple fork() won't do.
+# from http://perldoc.perl.org/perlipc.html#Complete-Dissociation-of-Child -from-Parent
+sub daemonize {
+ chdir("/") || die "can't chdir to /: $!";
+ open(STDIN, "< /dev/null") || die "can't read /dev/null: $!";
+ open(STDOUT, "> /dev/null") || die "can't write to /dev/null: $!";
+ defined(my $pid = fork()) || die "can't fork: $!";
+ exit if $pid; # non-zero now means I am the parent
+ (setsid() != -1) || die "Can't start a new session: $!";
+ open(STDERR, ">&STDOUT") || die "can't dup stdout: $!";
+
+ if ($pidfile) {
+ open(PIDFILE, '>', $pidfile);
+ print PIDFILE $$, "\n";
+ close(PIDFILE);
+ }
+}
+
my ($mountpoint) = '';
$mountpoint = shift(@ARGV) if @ARGV;
@@ -182,18 +201,9 @@ sub x_statfs {
print STDERR "ERROR: attempted to mount to non-directory\n";
return -&ENOTDIR
}
-my $pid = fork();
-die("fork() failed: $!") unless defined $pid;
-if ($pid > 0) {
- # parent process
- exit(0);
-}
-if ($pidfile) {
- open(PIDFILE, '>', $pidfile);
- print PIDFILE $$, "\n";
- close(PIDFILE);
-}
+daemonize();
+
Fuse::main(
'mountpoint' => $mountpoint,
'getattr' => 'main::x_getattr',
Please sign in to comment.
Something went wrong with that request. Please try again.