aboutsummaryrefslogtreecommitdiff
path: root/openssl-sys/src
diff options
context:
space:
mode:
authorSteven Fackler <[email protected]>2017-07-25 20:32:04 -0700
committerSteven Fackler <[email protected]>2017-07-25 20:35:29 -0700
commit82b1a12f356e828acc7d4824f316f16d77d6ae83 (patch)
tree374aefbd788c9aa69f5587df076c35291b2f76cb /openssl-sys/src
parentAlways apt-get update (diff)
downloadrust-openssl-82b1a12f356e828acc7d4824f316f16d77d6ae83.tar.xz
rust-openssl-82b1a12f356e828acc7d4824f316f16d77d6ae83.zip
Abort on bad unlock and safe core dumps
Diffstat (limited to 'openssl-sys/src')
-rw-r--r--openssl-sys/src/ossl10x.rs6
1 files changed, 5 insertions, 1 deletions
diff --git a/openssl-sys/src/ossl10x.rs b/openssl-sys/src/ossl10x.rs
index a0fdb396..771dc528 100644
--- a/openssl-sys/src/ossl10x.rs
+++ b/openssl-sys/src/ossl10x.rs
@@ -2,6 +2,7 @@ use std::sync::{Mutex, MutexGuard};
use std::sync::{Once, ONCE_INIT};
use std::mem;
use std::ptr;
+use std::process;
use libc::{c_int, c_char, c_void, c_long, c_uchar, size_t, c_uint, c_ulong};
#[cfg(not(ossl101))]
@@ -746,7 +747,10 @@ unsafe extern "C" fn locking_function(mode: c_int, n: c_int, _file: *const c_cha
if mode & ::CRYPTO_LOCK != 0 {
(*GUARDS)[n as usize] = Some(mutex.lock().unwrap());
} else {
- &(*GUARDS)[n as usize].take().expect("lock already unlocked");
+ if let None = &(*GUARDS)[n as usize].take() {
+ println!("lock {} already unlocked", n);
+ process::abort();
+ }
}
}