Commit 16099833772cb497eac4118350e974abf08c8032

Edward Thomson 2016-03-03T22:57:45

Merge pull request #3651 from libgit2/cmn/init-libssh2 ssh: initialize libssh2

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