diff --git a/Cargo.toml b/Cargo.toml index 109ef84d..1428428b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,6 +21,7 @@ rblas = "0.0.10" enum_primitive = "0.1.0" byteorder = "0.4" num = "0.1" +lazy_static = "0.1.15" clippy = { version = "0.0.27", optional = true } diff --git a/src/frameworks/opencl/api/platform.rs b/src/frameworks/opencl/api/platform.rs index 71dc4331..c7d9acfe 100644 --- a/src/frameworks/opencl/api/platform.rs +++ b/src/frameworks/opencl/api/platform.rs @@ -6,7 +6,7 @@ use super::types as cl; use super::ffi::*; use std::ptr; use std::iter::repeat; -use std::sync::{StaticMutex, MUTEX_INIT}; +use std::sync::Mutex; impl API { /// Returns a list of available platforms. @@ -22,7 +22,9 @@ impl API { // This mutex is used to work around weak OpenCL implementations. // On some implementations concurrent calls to clGetPlatformIDs // will cause the implantation to return invalid status. - static mut platforms_mutex: StaticMutex = MUTEX_INIT; + lazy_static! { + static ref platforms_mutex: Mutex<()> = Mutex::new(()); + } let guard = unsafe {platforms_mutex.lock()}; try!(unsafe {API::ffi_get_platform_ids(0, ptr::null_mut(), (&mut num_platforms))}); diff --git a/src/lib.rs b/src/lib.rs index afc8b1a5..a643914f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -134,7 +134,6 @@ #![cfg_attr(lint, feature(plugin))] #![cfg_attr(lint, plugin(clippy))] #![allow(dead_code)] -#![feature(static_mutex)] #![deny(missing_docs, missing_debug_implementations, missing_copy_implementations, trivial_casts, trivial_numeric_casts, @@ -145,6 +144,8 @@ extern crate libc; extern crate bitflags; #[macro_use] extern crate enum_primitive; +#[macro_use] +extern crate lazy_static; extern crate num; extern crate byteorder; extern crate rblas as blas;