diff options
Diffstat (limited to 'odb.c')
| -rw-r--r-- | odb.c | 14 |
1 files changed, 13 insertions, 1 deletions
@@ -1153,7 +1153,12 @@ void odb_reprepare(struct object_database *o) struct odb_transaction *odb_transaction_begin(struct object_database *odb) { - return odb_transaction_files_begin(odb->sources); + if (odb->transaction) + return NULL; + + odb->transaction = odb_transaction_files_begin(odb->sources); + + return odb->transaction; } void odb_transaction_commit(struct odb_transaction *transaction) @@ -1161,5 +1166,12 @@ void odb_transaction_commit(struct odb_transaction *transaction) if (!transaction) return; + /* + * Ensure the transaction ending matches the pending transaction. + */ + ASSERT(transaction == transaction->source->odb->transaction); + transaction->commit(transaction); + transaction->source->odb->transaction = NULL; + free(transaction); } |
