summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2016-03-03 22:26:31 +0100
committerCarlos Martín Nieto <cmn@dwim.me>2016-03-03 22:26:31 +0100
commit22f3d3aa6b2500a0c587938f7939c05a28afacf2 (patch)
treeb05d36e992c8321a528d0705ce6b22966b9a72a5
parent839bdb05a0a2957c0362cdbab219dcfa463a0e94 (diff)
downloadlibgit2-cmn/init-libssh2.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.c4
-rw-r--r--src/transports/ssh.c16
-rw-r--r--src/transports/ssh.h12
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