diff --git a/odb/transaction.c b/odb/transaction.c index d3de01db50..b20d6a16f8 100644 --- a/odb/transaction.c +++ b/odb/transaction.c @@ -18,19 +18,26 @@ int odb_transaction_begin(struct object_database *odb, return ret; } -void odb_transaction_commit(struct odb_transaction *transaction) +int odb_transaction_commit(struct odb_transaction *transaction) { + int ret; + if (!transaction) - return; + return 0; /* * Ensure the transaction ending matches the pending transaction. */ ASSERT(transaction == transaction->source->odb->transaction); - transaction->commit(transaction); + ret = transaction->commit(transaction); + if (ret) + return ret; + transaction->source->odb->transaction = NULL; free(transaction); + + return 0; } int odb_transaction_write_object_stream(struct odb_transaction *transaction, diff --git a/odb/transaction.h b/odb/transaction.h index cd6d50f2e5..7898770071 100644 --- a/odb/transaction.h +++ b/odb/transaction.h @@ -54,7 +54,7 @@ static inline void odb_transaction_begin_or_die(struct object_database *odb, * Commits an ODB transaction making the written objects visible. If the * specified transaction is NULL, the function is a no-op. */ -void odb_transaction_commit(struct odb_transaction *transaction); +int odb_transaction_commit(struct odb_transaction *transaction); /* * Writes the object in the provided stream into the transaction. The resulting