From 01927c19acfdc6a601c7f06c7c11c83f7e4b8921 Mon Sep 17 00:00:00 2001 From: Steven Fackler Date: Tue, 25 Jul 2017 21:59:52 -0700 Subject: [PATCH] Initialize OpenSSL in DSA constructor This fixes the double unlock errors that were popping up on circle --- openssl-sys/src/ossl10x.rs | 7 ++++++- openssl/src/dsa.rs | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/openssl-sys/src/ossl10x.rs b/openssl-sys/src/ossl10x.rs index 6f802bdf..b5adb828 100644 --- a/openssl-sys/src/ossl10x.rs +++ b/openssl-sys/src/ossl10x.rs @@ -3,6 +3,7 @@ use std::sync::{Once, ONCE_INIT}; use std::mem; use std::ptr; use std::process; +use std::io::{self, Write}; use libc::{c_int, c_char, c_void, c_long, c_uchar, size_t, c_uint, c_ulong}; #[cfg(not(ossl101))] @@ -748,7 +749,11 @@ unsafe extern "C" fn locking_function(mode: c_int, n: c_int, _file: *const c_cha (*GUARDS)[n as usize] = Some(mutex.lock().unwrap()); } else { if let None = (*GUARDS)[n as usize].take() { - println!("lock {} already unlocked", n); + let _ = writeln!( + io::stderr(), + "BUG: rust-openssl lock {} already unlocked, aborting", + n + ); process::abort(); } } diff --git a/openssl/src/dsa.rs b/openssl/src/dsa.rs index 130e1dc7..23ab5743 100644 --- a/openssl/src/dsa.rs +++ b/openssl/src/dsa.rs @@ -79,6 +79,7 @@ impl DsaRef { impl Dsa { /// Generate a DSA key pair. pub fn generate(bits: u32) -> Result { + ffi::init(); unsafe { let dsa = Dsa(try!(cvt_p(ffi::DSA_new()))); try!(cvt(ffi::DSA_generate_parameters_ex(