Merge pull request #3651 from libgit2/cmn/init-libssh2 ssh: initialize libssh2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
diff --git a/src/global.c b/src/global.c
index c65b21a..0bfde1e 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 239e0ba..35739ab 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 0000000..2db2cc5
--- /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