From 2ce2a48f2dfe6a92c0418f5c00e955039fdd0b96 Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Tue, 2 May 2017 13:37:15 +0200 Subject: [PATCH] transports: ssh: clean up after libssh2 on exit After calling `libssh2_init`, we need to clean up after the library by executing `libssh2_exit` as soon as we exit. Register a shutdown handler to do so which simply calls `libssh2_exit`. This fixes several memory leaks. --- src/global.c | 2 +- src/transports/ssh.c | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/global.c b/src/global.c index e2ad8fe71..afa57e1d6 100644 --- a/src/global.c +++ b/src/global.c @@ -22,7 +22,7 @@ git_mutex git__mwindow_mutex; -#define MAX_SHUTDOWN_CB 8 +#define MAX_SHUTDOWN_CB 9 static git_global_shutdown_fn git__shutdown_callbacks[MAX_SHUTDOWN_CB]; static git_atomic git__n_shutdown_callbacks; diff --git a/src/transports/ssh.c b/src/transports/ssh.c index d195d58ad..4c55e3f2a 100644 --- a/src/transports/ssh.c +++ b/src/transports/ssh.c @@ -9,6 +9,7 @@ #include #endif +#include "global.h" #include "git2.h" #include "buffer.h" #include "netops.h" @@ -893,6 +894,13 @@ int git_transport_ssh_with_paths(git_transport **out, git_remote *owner, void *p #endif } +#ifdef GIT_SSH +static void shutdown_ssh(void) +{ + libssh2_exit(); +} +#endif + int git_transport_ssh_global_init(void) { #ifdef GIT_SSH @@ -901,6 +909,7 @@ int git_transport_ssh_global_init(void) return -1; } + git__on_shutdown(shutdown_ssh); return 0; #else