… | |
… | |
860 | |
860 | |
861 | =cut |
861 | =cut |
862 | |
862 | |
863 | { |
863 | { |
864 | my $db; |
864 | my $db; |
865 | my $path = cf::datadir . "/database.pst"; |
865 | my $path = cf::localdir . "/database.pst"; |
866 | |
866 | |
867 | sub db_load() { |
867 | sub db_load() { |
868 | warn "loading database $path\n";#d# remove later |
868 | warn "loading database $path\n";#d# remove later |
869 | $db = stat $path ? Storable::retrieve $path : { }; |
869 | $db = stat $path ? Storable::retrieve $path : { }; |
870 | } |
870 | } |
… | |
… | |
872 | my $pid; |
872 | my $pid; |
873 | |
873 | |
874 | sub db_save() { |
874 | sub db_save() { |
875 | warn "saving database $path\n";#d# remove later |
875 | warn "saving database $path\n";#d# remove later |
876 | waitpid $pid, 0 if $pid; |
876 | waitpid $pid, 0 if $pid; |
877 | unless ($pid = fork) { |
877 | if (0 == ($pid = fork)) { |
878 | $db->{_meta}{version} = 1; |
878 | $db->{_meta}{version} = 1; |
879 | Storable::nstore $db, "$path~"; |
879 | Storable::nstore $db, "$path~"; |
880 | rename "$path~", $path; |
880 | rename "$path~", $path; |
|
|
881 | kill 9, $$ if defined $pid; #d# remove when binary updated |
881 | cf::_exit 0 if defined $pid; |
882 | cf::_exit 0 if defined $pid; |
882 | } |
883 | } |
883 | } |
884 | } |
884 | |
885 | |
885 | my $dirty; |
886 | my $dirty; |
… | |
… | |
910 | } else { |
911 | } else { |
911 | $db->{$_[0]} = $_[1]; |
912 | $db->{$_[0]} = $_[1]; |
912 | } |
913 | } |
913 | db_dirty; |
914 | db_dirty; |
914 | } |
915 | } |
|
|
916 | |
|
|
917 | attach_global |
|
|
918 | prio => 10000, |
|
|
919 | on_cleanup => sub { |
|
|
920 | db_sync; |
|
|
921 | }, |
|
|
922 | ; |
915 | } |
923 | } |
916 | |
924 | |
917 | ############################################################################# |
925 | ############################################################################# |
918 | # the server's main() |
926 | # the server's main() |
919 | |
927 | |