Author: dylan
Date: 2004-05-30 21:26:00 -0400 (Sun, 30 May 2004)
New Revision: 206

Modified:
   trunk/haver-core/lib/Haver/OS/Unix.pm
   trunk/haver-core/lib/Haver/Savable.pm
Log:
Haver::OS::Unix now has a daemonize method.

Have::Savable now calls _init_data()
even when the file exists. This causes
default => { } in Haver::Config to behave in
expected manner.



Modified: trunk/haver-core/lib/Haver/OS/Unix.pm
===================================================================
--- trunk/haver-core/lib/Haver/OS/Unix.pm       2004-05-31 01:24:40 UTC (rev 
205)
+++ trunk/haver-core/lib/Haver/OS/Unix.pm       2004-05-31 01:26:00 UTC (rev 
206)
@@ -20,6 +20,7 @@
 use warnings;
 use Carp;
 
+use POSIX;
 use File::Path;
 use File::Basename;
 
@@ -30,6 +31,31 @@
 }
 
 
+# Thanks to Vadim and his replaybot for this code.
+sub daemonize {
+       my ($this, $pidfile) = @_;
+
+       croak "daemonize requires a pidfile!" unless $pidfile;
+       
+       close STDERR;
+       close STDIN;
+       close STDOUT;
+       my $pid = fork;
+
+       if (not defined $pid) {
+               die "Daemonization failed!";
+       } elsif ($pid > 0) {
+               exit;
+       } else {
+               POSIX::setsid() or die "SERVER:  Can't start a new session: $!";
+               $SIG{PIPE} = 'IGNORE';
+               $SIG{HUP}  = 'IGNORE';
+               open my $fh, '>'.$pidfile or die "Can't open $pidfile for 
writing: $!";
+               print $fh "$$\n";
+               close $fh;
+       }
+}
+
 sub config_find {
        my ($this, %arg) = @_;
        my $scope = $arg{scope} || 'user';

Modified: trunk/haver-core/lib/Haver/Savable.pm
===================================================================
--- trunk/haver-core/lib/Haver/Savable.pm       2004-05-31 01:24:40 UTC (rev 
205)
+++ trunk/haver-core/lib/Haver/Savable.pm       2004-05-31 01:26:00 UTC (rev 
206)
@@ -52,6 +52,7 @@
                my $data = YAML::Load($raw);
                close $fh;
                $me->{_mtime} = File::stat::populate(CORE::stat(_))->mtime;
+               $me->_init_data;
                return $me->_load_data($data);
        } else {
                $me->{_mtime} = time;


Reply via email to