From 891db584c1e7706e3075cea454f639ff3272c2a3 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Sat, 26 Nov 2016 08:45:57 -0800 Subject: Push init synchronization to sys layer --- libssh2-sys/lib.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'libssh2-sys') 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() {} +} -- cgit v1.2.3