]> the.earth.li Git - onak.git/commitdiff
cscvs to tla changeset 116
authorJonathan McDowell <noodles@earth.li>
Mon, 31 May 2004 23:48:11 +0000 (23:48 +0000)
committerJonathan McDowell <noodles@earth.li>
Mon, 31 May 2004 23:48:11 +0000 (23:48 +0000)
Author: noodles
Date: 2004/01/04 18:48:37
Add a lock around the call to onak so that we've only got one copy of onak-mail
running it at once.

onak-mail.pl

index 1c3647c9720f6493393cda7f1f031abf40b8d181..e5c0d046c188e1eeb8dcb2a592dcd9ac1f3ba975 100755 (executable)
@@ -6,10 +6,11 @@
 # Copyright 2002 Project Purple
 # Released under the GPL.
 #
-# $Id: onak-mail.pl,v 1.8 2003/10/11 22:17:17 noodles Exp $
+# $Id: onak-mail.pl,v 1.9 2004/01/04 18:48:37 noodles Exp $
 #
 
 use strict;
+use Fcntl ':flock';
 use IPC::Open3;
 
 my %config;
@@ -38,6 +39,8 @@ sub readconfig {
                        $config{'mta'} = $1;
                } elsif (/^pks_bin_dir (.*)/) {
                        $config{'pks_bin_dir'} = $1;
+               } elsif (/^db_dir (.*)/) {
+                       $config{'db_dir'} = $1;
                } elsif (/^syncsite (.*)/) {
                        push @{$config{'syncsites'}}, $1;
                }
@@ -59,6 +62,10 @@ sub submitupdate {
        my @data = @_;
        my (@errors, @mergedata);
 
+       open(LOCKFILE, '>'.$config{'db_dir'}.'/onak-mail.lck');
+       flock(LOCKFILE, LOCK_EX);
+       print LOCKFILE "$$";
+
        open3(\*MERGEIN, \*MERGEOUT, \*MERGEERR,
                $config{'pks_bin_dir'}."/onak", "-u", "add");
 
@@ -69,6 +76,9 @@ sub submitupdate {
        @errors = <MERGEERR>;
        close MERGEERR;
 
+       flock(LOCKFILE, LOCK_UN);
+       close(LOCKFILE);
+
        return @mergedata;
 }