Commit 4d7aa586 authored by Steven Fackler's avatar Steven Fackler
Browse files

Switch to real mutex for init.

parent 70483c1a
Loading
Loading
Loading
Loading
+22 −21
Original line number Diff line number Diff line
use std::cast;
use std::libc::{c_int, c_void, c_char};
use std::ptr;
use std::task;
use std::sync::atomics::{AtomicBool, INIT_ATOMIC_BOOL, AtomicUint,
                         INIT_ATOMIC_UINT, Acquire, Release, SeqCst};
use std::unstable::mutex::Mutex;
use std::sync::atomics::{AtomicUint, INIT_ATOMIC_UINT, Acquire, Release, SeqCst};
use std::unstable::finally::Finally;
use std::unstable::mutex::{Mutex, MUTEX_INIT};
use std::io::{Stream, Reader, Writer, Decorator};
use std::vec;

@@ -15,8 +14,8 @@ mod ffi;
#[cfg(test)]
mod tests;

static mut STARTED_INIT: AtomicBool = INIT_ATOMIC_BOOL;
static mut FINISHED_INIT: AtomicBool = INIT_ATOMIC_BOOL;
static mut INIT_LOCK: Mutex = MUTEX_INIT;
static mut INITIALIZED: bool = false;

static mut VERIFY_IDX: AtomicUint = INIT_ATOMIC_UINT;

@@ -25,10 +24,9 @@ static mut MUTEXES: AtomicUint = INIT_ATOMIC_UINT;

fn init() {
    unsafe {
        if STARTED_INIT.swap(true, Acquire) {
            while !FINISHED_INIT.load(Release) {
                task::deschedule();
            }
        INIT_LOCK.lock();
        (|| {
            if INITIALIZED {
                return;
            }

@@ -44,7 +42,10 @@ fn init() {

            ffi::CRYPTO_set_locking_callback(locking_function);

        FINISHED_INIT.store(true, Release);
            INITIALIZED = true;
        }).finally(|| {
            INIT_LOCK.unlock();
        })
    }
}