diff options
| author | Nelson Elhage <nelhage@nelhage.com> | 2018-06-24 21:56:51 +0000 |
|---|---|---|
| committer | Nelson Elhage <nelhage@nelhage.com> | 2018-06-25 02:17:18 +0000 |
| commit | bf4c2c57ccbf57d0472a8f68ab223c85db0d177f (patch) | |
| tree | fcc00a2769f40737f010e67592b3ba4736fd97db /src | |
| parent | e212011b9872c52f6205d3a30b10f753c3108918 (diff) | |
| download | libgit2-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.c | 27 |
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; } |
