diff options
| author | Patrick Steinhardt <ps@pks.im> | 2017-05-02 13:37:15 +0200 |
|---|---|---|
| committer | Patrick Steinhardt <ps@pks.im> | 2017-05-02 14:46:15 +0200 |
| commit | 2ce2a48f2dfe6a92c0418f5c00e955039fdd0b96 (patch) | |
| tree | 3b88b7a1c492f0c4e86030a1060e5a8223edaf1a /src | |
| parent | 8c027351cb5a3bb16f279795f32027c92f61039a (diff) | |
| download | libgit2-2ce2a48f2dfe6a92c0418f5c00e955039fdd0b96.tar.gz | |
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.
Diffstat (limited to 'src')
| -rw-r--r-- | src/global.c | 2 | ||||
| -rw-r--r-- | src/transports/ssh.c | 9 |
2 files changed, 10 insertions, 1 deletions
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 <libssh2.h> #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 |
