It used to be that ref_transaction_commit() allocated a temporary
array to hold the types of references while it is working.  Instead,
add a type field to ref_update that ref_transaction_commit() can use
as its scratch space.

Signed-off-by: Michael Haggerty <mhag...@alum.mit.edu>
---
 refs.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/refs.c b/refs.c
index 6fe4bfe8..c058f30 100644
--- a/refs.c
+++ b/refs.c
@@ -3279,6 +3279,7 @@ struct ref_update {
        int flags; /* REF_NODEREF? */
        int have_old; /* 1 if old_sha1 is valid, 0 otherwise */
        struct ref_lock *lock;
+       int type;
        const char refname[FLEX_ARRAY];
 };
 
@@ -3413,7 +3414,6 @@ int ref_transaction_commit(struct ref_transaction 
*transaction,
 {
        int ret = 0, delnum = 0, i;
        struct ref_update **updates;
-       int *types;
        const char **delnames;
        int n = transaction->nr;
 
@@ -3422,7 +3422,6 @@ int ref_transaction_commit(struct ref_transaction 
*transaction,
 
        /* Allocate work space */
        updates = xmalloc(sizeof(*updates) * n);
-       types = xmalloc(sizeof(*types) * n);
        delnames = xmalloc(sizeof(*delnames) * n);
 
        /* Copy, sort, and reject duplicate refs */
@@ -3440,7 +3439,7 @@ int ref_transaction_commit(struct ref_transaction 
*transaction,
                                               (update->have_old ?
                                                update->old_sha1 : NULL),
                                               update->flags,
-                                              &types[i], onerr);
+                                              &update->type, onerr);
                if (!update->lock) {
                        ret = 1;
                        goto cleanup;
@@ -3468,7 +3467,7 @@ int ref_transaction_commit(struct ref_transaction 
*transaction,
 
                if (update->lock) {
                        delnames[delnum++] = update->lock->ref_name;
-                       ret |= delete_ref_loose(update->lock, types[i]);
+                       ret |= delete_ref_loose(update->lock, update->type);
                }
        }
 
@@ -3482,7 +3481,6 @@ cleanup:
                if (updates[i]->lock)
                        unlock_ref(updates[i]->lock);
        free(updates);
-       free(types);
        free(delnames);
        ref_transaction_free(transaction);
        return ret;
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to