[PATCH v6 02/42] refs.c: allow passing NULL to ref_transaction_free
- From
Ronnie Sahlberg <sahlberg@google.com>
- Date
- May 1, 2014, 20:37 UTC
- Message-ID
- <1398976662-6962-3-git-send-email-sahlberg@google.com>
- In-Reply-To
- <1398976662-6962-1-git-send-email-sahlberg@google.com>
Allow ref_transaction_free to be called with NULL and in extension allow ref_transaction_rollback to be called for a NULL transaction.
This allows us to write code that will
if ( (!transaction ||
ref_transaction_update(...)) ||
(ref_transaction_commit(...) && !(transaction = NULL)) {
ref_transaction_rollback(transaction);
...
}In this case transaction is reset to NULL IFF ref_transaction_commit() was invoked and thus the rollback becomes ref_transaction_rollback(NULL) which is safe. IF the conditional triggered prior to ref_transaction_commit() then transaction is untouched and then ref_transaction_rollback(transaction) will rollback the failed transaction.
Signed-off-by: Ronnie Sahlberg <sahlberg@google.com> --- refs.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/refs.c b/refs.c index 138ab70..2d83ef6 100644 --- a/refs.c +++ b/refs.c @@ -3303,6 +3303,9 @@ static void ref_transaction_free(struct ref_transaction *transaction) { int i; + if (!transaction) + return; + for (i = 0; i < transaction->nr; i++) free(transaction->updates[i]);
-- 2.0.0.rc1.351.g4d2c8e4