Browse Source

Fix memory leaks when disconnecting transport instances

Most transport implementations tend to allocate a data buffer
in the struct transport instance during transport_get() so we
need to free that data buffer when we disconnect it.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Shawn O. Pearce 18 years ago committed by Junio C Hamano
parent
commit
f4e95765b0
  1. 8
      transport.c

8
transport.c

@ -236,6 +236,7 @@ static int close_bundle(struct transport *transport) @@ -236,6 +236,7 @@ static int close_bundle(struct transport *transport)
struct bundle_transport_data *data = transport->data;
if (data->fd > 0)
close(data->fd);
free(data);
return 0;
}

@ -372,6 +373,12 @@ static int git_transport_push(struct transport *transport, int refspec_nr, const @@ -372,6 +373,12 @@ static int git_transport_push(struct transport *transport, int refspec_nr, const
return !!err;
}

static int disconnect_git(struct transport *transport)
{
free(transport->data);
return 0;
}

static int is_local(const char *url)
{
const char *colon = strchr(url, ':');
@ -419,6 +426,7 @@ struct transport *transport_get(struct remote *remote, const char *url) @@ -419,6 +426,7 @@ struct transport *transport_get(struct remote *remote, const char *url)
ret->get_refs_list = get_refs_via_connect;
ret->fetch = fetch_refs_via_pack;
ret->push = git_transport_push;
ret->disconnect = disconnect_git;

data->thin = 1;
data->uploadpack = "git-upload-pack";

Loading…
Cancel
Save