* Commit more often to prevent out-of-memory errors.

This commit is contained in:
Eelco Dolstra 2005-02-09 14:37:24 +00:00
parent 98df735b51
commit 3a99616968
3 changed files with 22 additions and 4 deletions

View file

@ -33,11 +33,9 @@ Transaction::Transaction()
Transaction::Transaction(Database & db)
: txn(0)
{
db.requireEnv();
try {
db.env->txn_begin(0, &txn, 0);
} catch (DbException e) { rethrow(e); }
begin(db);
}
@ -47,6 +45,16 @@ Transaction::~Transaction()
}
void Transaction::begin(Database & db)
{
assert(txn == 0);
db.requireEnv();
try {
db.env->txn_begin(0, &txn, 0);
} catch (DbException e) { rethrow(e); }
}
void Transaction::commit()
{
if (!txn) throw Error("commit called on null transaction");

View file

@ -27,6 +27,7 @@ public:
Transaction(Database & _db);
~Transaction();
void begin(Database & db);
void abort();
void commit();

View file

@ -824,6 +824,7 @@ static void upgradeStore()
PathSet validPaths(validPaths2.begin(), validPaths2.end());
cerr << "hashing paths...";
int n = 0;
for (PathSet::iterator i = validPaths.begin(); i != validPaths.end(); ++i) {
checkInterrupt();
string s;
@ -832,10 +833,18 @@ static void upgradeStore()
Hash hash = hashPath(htSHA256, *i);
setHash(txn, *i, hash);
cerr << ".";
if (++n % 1000 == 0) {
txn.commit();
txn.begin(nixDB);
}
}
}
cerr << "\n";
txn.commit();
txn.begin(nixDB);
cerr << "processing closures...";
for (PathSet::iterator i = validPaths.begin(); i != validPaths.end(); ++i) {
checkInterrupt();