From: Ronnie Sahlberg Date: Thu, 15 May 2014 17:29:17 GMT Subject: [PATCH v8 02/44] refs.c: allow passing NULL to ref_transaction_free Message-ID: <1400174999-26786-3-git-send-email-sahlberg@google.com> In-Reply-To: <1400174999-26786-1-git-send-email-sahlberg@google.com> Allow ref_transaction_free to be called with NULL and as a result 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. Reviewed-by: Jonathan Nieder Signed-off-by: Ronnie Sahlberg --- refs.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/refs.c b/refs.c index 2114748..88d73c8 100644 --- a/refs.c +++ b/refs.c @@ -3312,6 +3312,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.rc3.477.g0f8edf7