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;