OSDN Git Service

Fix memory leaks when disconnecting transport instances
authorShawn O. Pearce <spearce@spearce.org>
Wed, 19 Sep 2007 04:49:42 +0000 (00:49 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 19 Sep 2007 10:22:31 +0000 (03:22 -0700)
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>
transport.c

index a1d0a3c..4f9cddc 100644 (file)
@@ -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
        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)
                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";