X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBM%2FDeep%2FEngine.pm;h=1cced745288437cf3cd05606adb3f2e723ccfbb9;hb=6fde4ed2b948886e5cf014dc34073da199148096;hp=542a4d3daad6aa7a60d7ace6179f92efb2935814;hpb=118ba3432abff7926f632c8f269fdbf60a3c36ff;p=dbsrgits%2FDBM-Deep.git diff --git a/lib/DBM/Deep/Engine.pm b/lib/DBM/Deep/Engine.pm index 542a4d3..1cced74 100644 --- a/lib/DBM/Deep/Engine.pm +++ b/lib/DBM/Deep/Engine.pm @@ -107,11 +107,10 @@ sub setup_fh { $self->open( $obj ) if !defined $obj->_fh; - unless ( $obj->{base_offset} ) { - my $fh = $obj->_fh; - - flock $fh, LOCK_EX; + my $fh = $obj->_fh; + flock $fh, LOCK_EX; + unless ( $obj->{base_offset} ) { seek($fh, 0 + $obj->_root->{file_offset}, SEEK_SET); my $signature; my $bytes_read = read( $fh, $signature, length(SIG_FILE)); @@ -157,8 +156,6 @@ sub setup_fh { $obj->_throw_error("File type mismatch"); } } - - flock $fh, LOCK_UN; } #XXX We have to make sure we don't mess up when autoflush isn't turned on @@ -168,6 +165,8 @@ sub setup_fh { $obj->_root->{end} = $stats[7]; } + flock $fh, LOCK_UN; + return 1; }