aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Fackler <[email protected]>2017-07-25 21:59:52 -0700
committerSteven Fackler <[email protected]>2017-07-25 21:59:52 -0700
commit01927c19acfdc6a601c7f06c7c11c83f7e4b8921 (patch)
tree6b46578d0c4930379679baf83c5d4f338937290e
parentFix build (diff)
downloadrust-openssl-01927c19acfdc6a601c7f06c7c11c83f7e4b8921.tar.xz
rust-openssl-01927c19acfdc6a601c7f06c7c11c83f7e4b8921.zip
Initialize OpenSSL in DSA constructor
This fixes the double unlock errors that were popping up on circle
-rw-r--r--openssl-sys/src/ossl10x.rs7
-rw-r--r--openssl/src/dsa.rs1
2 files changed, 7 insertions, 1 deletions
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<Dsa, ErrorStack> {
+ ffi::init();
unsafe {
let dsa = Dsa(try!(cvt_p(ffi::DSA_new())));
try!(cvt(ffi::DSA_generate_parameters_ex(