Changeset 815


Ignore:
Timestamp:
03/03/10 22:50:58 (14 years ago)
Author:
nanardon
Message:
  • use lock on base files based to ensure data are not read while another process write it
Location:
LATMOS-Accounts/lib/LATMOS/Accounts
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Mail.pm

    r811 r815  
    77use base qw(LATMOS::Accounts::Bases); 
    88use LATMOS::Accounts::Log; 
     9use Fcntl qw(:flock); 
    910 
    1011our $VERSION = (q$Rev: 641 $ =~ /^Rev: (\d+) /)[0]; 
     
    3435    if (open(my $handle, '<', $self->{file}{aliases})) { 
    3536        $self->log(LA_DEBUG, "Reading file %s", $self->{file}{aliases}); 
     37        flock($handle, LOCK_EX); 
    3638        while (my $line = <$handle>) { 
    3739            chomp($line); 
     
    5456    if (open(my $handle, '<', $self->{file}{revaliases})) {  
    5557        $self->log(LA_DEBUG, "Reading file %s", $self->{file}{revaliases}); 
     58        flock($handle, LOCK_EX); 
    5659        while (my $line = <$handle>) { 
    5760            chomp($line); 
     
    7780    my ($self) = @_; 
    7881 
    79     if (open(my $handle, '>', $self->{file}{aliases})) { 
     82    if (open(my $handle, '>>', $self->{file}{aliases})) { 
     83        flock($handle, LOCK_EX); 
     84        truncate($handle, 0); 
    8085        foreach (sort keys %{ $self->{aliases} }) { 
    8186            printf $handle "%s:%s\n", $_, $self->{aliases}{$_}; 
     
    9095 
    9196    if (open(my $handle, '>', $self->{file}{revaliases})) { 
     97        flock($handle, LOCK_EX); 
     98        truncate($handle, 0); 
    9299        foreach (sort keys %{ $self->{revaliases} }) { 
    93100            printf $handle "%s:%s\n", $_, $self->{revaliases}{$_}; 
  • LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Unix.pm

    r792 r815  
    77use base qw(LATMOS::Accounts::Bases); 
    88use LATMOS::Accounts::Log; 
     9use Fcntl qw(:flock); 
    910 
    1011our $VERSION = (q$Rev$ =~ /^Rev: (\d+) /)[0]; 
     
    126127    }; 
    127128    $self->log(LA_DEBUG, "Reading file $file"); 
     129    flock($handle, LOCK_EX); 
    128130    while (my $line = <$handle>) { 
    129131        chomp($line); 
     
    239241sub _save_unix_file { 
    240242    my ($self, $file, @data) = @_; 
    241     open(my $handle, '>', $file) or do { 
     243    open(my $handle, '>>', $file) or do { 
    242244        la_log(LA_ERR, "Cannot open unix file `%s' for writing (%s)", $file, $!); 
    243245        return; 
    244246    }; 
     247    flock($handle, LOCK_EX); 
     248    truncate($handle, 0); 
    245249    foreach my $line (@data) { 
    246250        print $handle join(':', map { defined($_) ? $_ : '' } @$line) . "\n"; 
  • LATMOS-Accounts/lib/LATMOS/Accounts/Synchro.pm

    r668 r815  
    88use LATMOS::Accounts::Log; 
    99use LATMOS::Accounts::Utils qw(exec_command); 
     10use Fcntl qw(:flock); 
    1011 
    1112=head1 NAME 
     
    143144} 
    144145 
    145 use Fcntl qw(:flock); 
    146  
    147146sub lock { 
    148147    my ($self) = @_; 
    149148 
    150149    $self->{lock}{handle} and return 1; 
     150    la_log(LA_DEBUG, "Trying to lock (pid $$)"); 
    151151    if ($self->{options}{state_dir}) { 
    152152        my $lockfile = $self->{options}{state_dir} . '/synclock'; 
     
    155155        $self->{lock}{handle} = $handle; 
    156156        $self->{lock}{filename} = $lockfile; 
     157        la_log(LA_DEBUG, "lock done (pid $$)"); 
    157158        return 1; 
    158159    } else { return 1 } 
Note: See TracChangeset for help on using the changeset viewer.