{"thread":{"id":"9938","subject":"[PATCH 5/5] Fix memory leaks when disconnecting transport instances","startedAt":"2007-09-19T04:49:42Z","lastAt":"2007-09-19T04:49:42Z","messageCount":1,"participants":["Shawn O. Pearce"],"isPatch":true,"patchVersion":1,"patchTotal":5},"messages":[{"id":"53548","messageId":"20070919044942.GE17107@spearce.org","threadId":"9938","inReplyTo":null,"subject":"[PATCH 5/5] Fix memory leaks when disconnecting transport instances","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2007-09-19T04:49:42Z","receivedAt":"2007-09-19T04:49:42Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Most transport implementations tend to allocate a data buffer\nin the struct transport instance during transport_get() so we\nneed to free that data buffer when we disconnect it.\n\nSigned-off-by: Shawn O. Pearce <spearce@spearce.org>\n---\n transport.c |    8 ++++++++\n 1 files changed, 8 insertions(+), 0 deletions(-)\n\ndiff --git a/transport.c b/transport.c\nindex a1d0a3c..4f9cddc 100644\n--- a/transport.c\n+++ b/transport.c\n@@ -236,6 +236,7 @@ static int close_bundle(struct transport *transport)\n \tstruct bundle_transport_data *data = transport->data;\n \tif (data->fd > 0)\n \t\tclose(data->fd);\n+\tfree(data);\n \treturn 0;\n }\n \n@@ -372,6 +373,12 @@ static int git_transport_push(struct transport *transport, int refspec_nr, const\n \treturn !!err;\n }\n \n+static int disconnect_git(struct transport *transport)\n+{\n+\tfree(transport->data);\n+\treturn 0;\n+}\n+\n static int is_local(const char *url)\n {\n \tconst char *colon = strchr(url, ':');\n@@ -419,6 +426,7 @@ struct transport *transport_get(struct remote *remote, const char *url)\n \t\tret->get_refs_list = get_refs_via_connect;\n \t\tret->fetch = fetch_refs_via_pack;\n \t\tret->push = git_transport_push;\n+\t\tret->disconnect = disconnect_git;\n \n \t\tdata->thin = 1;\n \t\tdata->uploadpack = \"git-upload-pack\";\n-- \n1.5.3.1.195.gadd6\n"}]}