- my $dbh = DBI->connect("dbi:SQLite:dbname=$f",'','', {
- AutoCommit => 1,
- RaiseError => 1,
- PrintError => 0,
- ReadOnly => !$rw,
- sqlite_use_immediate_transaction => 1,
- });
+ my (@st, $st, $dbh);
+ my $tries = 0;
+ do {
+ @st = stat($f) or die "failed to stat $f: $!";
+ $st = pack('dd', $st[0], $st[1]); # 0: dev, 1: inode
+ $dbh = DBI->connect("dbi:SQLite:dbname=$f",'','', {
+ AutoCommit => 1,
+ RaiseError => 1,
+ PrintError => 0,
+ ReadOnly => !$rw,
+ sqlite_use_immediate_transaction => 1,
+ });
+ $self->{st} = $st;
+ @st = stat($f) or die "failed to stat $f: $!";
+ $st = pack('dd', $st[0], $st[1]);
+ } while ($st ne $self->{st} && $tries++ < 3);
+ warn "W: $f: .st_dev, .st_ino unstable\n" if $st ne $self->{st};