summaryrefslogtreecommitdiff
path: root/libssh2-sys/lib.rs
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2016-11-26 08:45:57 -0800
committerAlex Crichton <alex@alexcrichton.com>2016-11-26 08:45:57 -0800
commit891db584c1e7706e3075cea454f639ff3272c2a3 (patch)
treed575dc0e21c08455b5fdd535d3f45c0cd9636a28 /libssh2-sys/lib.rs
parent221c0d844daad0180422aa23167b9e306897fe07 (diff)
downloadssh2-rs-891db584c1e7706e3075cea454f639ff3272c2a3.zip
Push init synchronization to sys layer
Diffstat (limited to 'libssh2-sys/lib.rs')
-rw-r--r--libssh2-sys/lib.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/libssh2-sys/lib.rs b/libssh2-sys/lib.rs
index 660587a..2432b55 100644
--- a/libssh2-sys/lib.rs
+++ b/libssh2-sys/lib.rs
@@ -533,4 +533,25 @@ fn smoke() {
unsafe { libssh2_init(0) };
}
+#[doc(hidden)]
pub fn issue_14344_workaround() {}
+
+pub fn init() {
+ use std::sync::{Once, ONCE_INIT};
+
+ static INIT: Once = ONCE_INIT;
+ INIT.call_once(|| unsafe {
+ platform_init();
+ assert_eq!(libssh2_init(LIBSSH2_INIT_NO_CRYPTO), 0);
+ assert_eq!(libc::atexit(shutdown), 0);
+ });
+ extern fn shutdown() { unsafe { libssh2_exit(); } }
+
+ #[cfg(unix)]
+ fn platform_init() {
+ openssl_sys::init();
+ }
+
+ #[cfg(windows)]
+ fn platform_init() {}
+}