forked from lix-project/lix
* Lock the database during updates.
This commit is contained in:
parent
b2c11b9ed0
commit
08c8971498
|
@ -3,6 +3,7 @@ use DBI;
|
||||||
use Cwd;
|
use Cwd;
|
||||||
use File::stat;
|
use File::stat;
|
||||||
use File::Path;
|
use File::Path;
|
||||||
|
use Fcntl ':flock';
|
||||||
|
|
||||||
|
|
||||||
sub addPatch {
|
sub addPatch {
|
||||||
|
@ -259,7 +260,11 @@ EOF
|
||||||
|
|
||||||
$dbh->do("create index if not exists Patches_storePath on Patches(storePath)");
|
$dbh->do("create index if not exists Patches_storePath on Patches(storePath)");
|
||||||
|
|
||||||
# !!! locking?
|
# Acquire an exclusive lock to ensure that only one process
|
||||||
|
# updates the DB at the same time. This isn't really necessary,
|
||||||
|
# but it prevents work duplication and lock contention in SQLite.
|
||||||
|
open MAINLOCK, ">>$manifestDir/cache.lock" or die;
|
||||||
|
flock(MAINLOCK, LOCK_EX) or die;
|
||||||
|
|
||||||
# Read each manifest in $manifestDir and add it to the database,
|
# Read each manifest in $manifestDir and add it to the database,
|
||||||
# unless we've already done so on a previous run.
|
# unless we've already done so on a previous run.
|
||||||
|
@ -326,6 +331,8 @@ EOF
|
||||||
|
|
||||||
$dbh->commit;
|
$dbh->commit;
|
||||||
|
|
||||||
|
close MAINLOCK;
|
||||||
|
|
||||||
return $dbh;
|
return $dbh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue