diff options
author | Carlos Martín Nieto <cmn@dwim.me> | 2016-03-03 22:26:31 +0100 |
---|---|---|
committer | Carlos Martín Nieto <cmn@dwim.me> | 2016-03-03 22:26:31 +0100 |
commit | 22f3d3aa6b2500a0c587938f7939c05a28afacf2 (patch) | |
tree | b05d36e992c8321a528d0705ce6b22966b9a72a5 | |
parent | 839bdb05a0a2957c0362cdbab219dcfa463a0e94 (diff) | |
download | libgit2-22f3d3aa6b2500a0c587938f7939c05a28afacf2.tar.gz |
ssh: initialize libssh2cmn/init-libssh2
We should have been doing this, but it initializes itself upon first
use, which works as long as nobody's doing concurrent network
operations. Initialize it on our init to make sure it's not getting
initialized concurrently.
-rw-r--r-- | src/global.c | 4 | ||||
-rw-r--r-- | src/transports/ssh.c | 16 | ||||
-rw-r--r-- | src/transports/ssh.h | 12 |
3 files changed, 31 insertions, 1 deletions
diff --git a/src/global.c b/src/global.c index c65b21a11..0bfde1e04 100644 --- a/src/global.c +++ b/src/global.c @@ -12,6 +12,7 @@ #include "openssl_stream.h" #include "thread-utils.h" #include "git2/global.h" +#include "transports/ssh.h" #if defined(GIT_MSVC_CRTDBG) #include "win32/w32_stack.h" @@ -56,7 +57,8 @@ static int init_common(void) /* Initialize any other subsystems that have global state */ if ((ret = git_hash_global_init()) == 0 && (ret = git_sysdir_global_init()) == 0 && - (ret = git_filter_global_init()) == 0) + (ret = git_filter_global_init()) == 0 && + (ret = git_transport_ssh_global_init()) == 0) ret = git_openssl_stream_global_init(); GIT_MEMORY_BARRIER; diff --git a/src/transports/ssh.c b/src/transports/ssh.c index 239e0bae7..35739abe3 100644 --- a/src/transports/ssh.c +++ b/src/transports/ssh.c @@ -15,6 +15,7 @@ #include "smart.h" #include "cred.h" #include "socket_stream.h" +#include "ssh.h" #ifdef GIT_SSH @@ -876,3 +877,18 @@ int git_transport_ssh_with_paths(git_transport **out, git_remote *owner, void *p return -1; #endif } + +int git_transport_ssh_global_init(void) +{ +#ifdef GIT_SSH + + libssh2_init(0); + return 0; + +#else + + /* Nothing to initialize */ + return 0; + +#endif +} diff --git a/src/transports/ssh.h b/src/transports/ssh.h new file mode 100644 index 000000000..2db2cc5df --- /dev/null +++ b/src/transports/ssh.h @@ -0,0 +1,12 @@ +/* + * Copyright (C) the libgit2 contributors. All rights reserved. + * + * This file is part of libgit2, distributed under the GNU GPL v2 with + * a Linking Exception. For full terms see the included COPYING file. + */ +#ifndef INCLUDE_ssh_h__ +#define INCLUDE_ssh_h__ + +int git_transport_ssh_global_init(void); + +#endif |