diff options
-rw-r--r-- | src/transports/smart.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/src/transports/smart.c b/src/transports/smart.c index 619a81ff8..180099539 100644 --- a/src/transports/smart.c +++ b/src/transports/smart.c @@ -279,14 +279,13 @@ static int git_smart__connect( return error; /* Detect capabilities */ - if (git_smart__detect_caps(first, &t->caps, &symrefs) < 0) { - free_symrefs(&symrefs); - return -1; + if ((error = git_smart__detect_caps(first, &t->caps, &symrefs)) == 0) { + goto cleanup; } /* If the only ref in the list is capabilities^{} with OID_ZERO, remove it */ if (1 == t->refs.length && !strcmp(first->head.name, "capabilities^{}") && - git_oid_iszero(&first->head.oid)) { + git_oid_iszero(&first->head.oid)) { git_vector_clear(&t->refs); git_pkt_free((git_pkt *)first); } @@ -294,15 +293,17 @@ static int git_smart__connect( /* Keep a list of heads for _ls */ git_smart__update_heads(t, &symrefs); - free_symrefs(&symrefs); - if (t->rpc && git_smart__reset_stream(t, false) < 0) - return -1; + if (t->rpc && (error = git_smart__reset_stream(t, false)) < 0) + goto cleanup; /* We're now logically connected. */ t->connected = 1; - return 0; +cleanup: + free_symrefs(&symrefs); + + return error; } static int git_smart__ls(const git_remote_head ***out, size_t *size, git_transport *transport) |