summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVicent Martí <tanoku@gmail.com>2012-05-01 17:55:22 -0700
committerVicent Martí <tanoku@gmail.com>2012-05-01 17:55:22 -0700
commit5587a9c93054643d66b022d03b975720e539cc3e (patch)
tree9066237c97077be789fd1498ef9f400e743b9aa5
parent52877c897504ed610bc957b88b6ba9e442077c07 (diff)
parent42ea35c06157a5c75cfd20e8fe3a813140c26485 (diff)
downloadlibgit2-5587a9c93054643d66b022d03b975720e539cc3e.tar.gz
Merge pull request #658 from schu/remote-disconnect
remote: don't free transport on disconnect
-rw-r--r--examples/network/fetch.c3
-rw-r--r--src/remote.c18
2 files changed, 13 insertions, 8 deletions
diff --git a/examples/network/fetch.c b/examples/network/fetch.c
index d4a39746f..23046bd09 100644
--- a/examples/network/fetch.c
+++ b/examples/network/fetch.c
@@ -93,6 +93,9 @@ int fetch(git_repository *repo, int argc, char **argv)
} while (!data.finished);
printf("\rReceived %d/%d objects in %d bytes\n", stats.processed, stats.total, bytes);
+ // Disconnect the underlying connection to prevent from idling.
+ git_remote_disconnect(remote);
+
// Update the references in the remote's namespace to point to the
// right commits. This may be needed even if there was no packfile
// to download, which can happen e.g. when the branches have been
diff --git a/src/remote.c b/src/remote.c
index 71cb62719..98c256929 100644
--- a/src/remote.c
+++ b/src/remote.c
@@ -381,13 +381,8 @@ void git_remote_disconnect(git_remote *remote)
{
assert(remote);
- if (remote->transport != NULL) {
- if (remote->transport->connected)
+ if (remote->transport != NULL && remote->transport->connected)
remote->transport->close(remote->transport);
-
- remote->transport->free(remote->transport);
- remote->transport = NULL;
- }
}
void git_remote_free(git_remote *remote)
@@ -395,14 +390,21 @@ void git_remote_free(git_remote *remote)
if (remote == NULL)
return;
+ if (remote->transport != NULL) {
+ git_remote_disconnect(remote);
+
+ remote->transport->free(remote->transport);
+ remote->transport = NULL;
+ }
+
+ git_vector_free(&remote->refs);
+
git__free(remote->fetch.src);
git__free(remote->fetch.dst);
git__free(remote->push.src);
git__free(remote->push.dst);
git__free(remote->url);
git__free(remote->name);
- git_vector_free(&remote->refs);
- git_remote_disconnect(remote);
git__free(remote);
}