summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNelson Elhage <nelhage@nelhage.com>2018-06-24 21:56:51 +0000
committerNelson Elhage <nelhage@nelhage.com>2018-06-25 02:17:18 +0000
commitbf4c2c57ccbf57d0472a8f68ab223c85db0d177f (patch)
treefcc00a2769f40737f010e67592b3ba4736fd97db /src
parente212011b9872c52f6205d3a30b10f753c3108918 (diff)
downloadlibgit2-bf4c2c57ccbf57d0472a8f68ab223c85db0d177f.tar.gz
wait_while_ack: use git_pkt_free
git__free is insufficient if the packet is a git_pkt_ref or another type that requires freeing referenced structures.
Diffstat (limited to 'src')
-rw-r--r--src/transports/smart_protocol.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/src/transports/smart_protocol.c b/src/transports/smart_protocol.c
index 8a094b698..9bf2883d6 100644
--- a/src/transports/smart_protocol.c
+++ b/src/transports/smart_protocol.c
@@ -317,27 +317,34 @@ on_error:
static int wait_while_ack(gitno_buffer *buf)
{
int error;
- git_pkt_ack *pkt = NULL;
+ git_pkt *pkt = NULL;
+ git_pkt_ack *ack = NULL;
while (1) {
- git__free(pkt);
+ if (pkt) {
+ git_pkt_free(pkt);
+ }
- if ((error = recv_pkt((git_pkt **)&pkt, NULL, buf)) < 0)
+ if ((error = recv_pkt(&pkt, NULL, buf)) < 0)
return error;
if (pkt->type == GIT_PKT_NAK)
break;
+ if (pkt->type != GIT_PKT_ACK)
+ continue;
- if (pkt->type == GIT_PKT_ACK &&
- (pkt->status != GIT_ACK_CONTINUE &&
- pkt->status != GIT_ACK_COMMON &&
- pkt->status != GIT_ACK_READY)) {
- git__free(pkt);
- return 0;
+ ack = (git_pkt_ack*)pkt;
+
+ if (ack->status != GIT_ACK_CONTINUE &&
+ ack->status != GIT_ACK_COMMON &&
+ ack->status != GIT_ACK_READY) {
+ break;
}
}
- git__free(pkt);
+ if (pkt) {
+ git_pkt_free(pkt);
+ }
return 0;
}