From ee5a9f133869809385bef96fcded4f22ddcc003f Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Fri, 6 Jan 2017 15:31:12 -0800 Subject: [PATCH] Replace need for drop_types_in_const with lazy_static --- Cargo.lock | 1 + Cargo.toml | 1 + src/lib.rs | 3 ++- src/window.rs | 18 +++++++++--------- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b96204f3..a741a18f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10,6 +10,7 @@ dependencies = [ "font 0.1.0", "gl_generator 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "glutin 0.6.1 (git+https://github.com/jwilm/glutin?rev=af7fe340bd4a2af53ea521defcb4f377cdc588cf)", + "lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", "mio 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", "notify 2.6.3 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/Cargo.toml b/Cargo.toml index 3ab73116..b9be2a9c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,6 +17,7 @@ notify = "2.6" bitflags = "*" font = { path = "./font" } errno = "0.1.6" +lazy_static = "0.2.2" parking_lot = { version = "0.3.1", features = ["nightly"] } serde = "0.8" serde_yaml = "0.5" diff --git a/src/lib.rs b/src/lib.rs index fdfe5f59..46e9dceb 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -16,7 +16,6 @@ #![feature(range_contains)] #![feature(inclusive_range_syntax)] #![feature(inclusive_range)] -#![feature(drop_types_in_const)] #![cfg_attr(feature = "clippy", feature(plugin))] #![cfg_attr(feature = "clippy", plugin(clippy))] #![cfg_attr(feature = "clippy", deny(clippy))] @@ -36,6 +35,8 @@ extern crate copypasta; extern crate errno; extern crate font; extern crate glutin; +#[macro_use] +extern crate lazy_static; extern crate libc; extern crate mio; extern crate notify; diff --git a/src/window.rs b/src/window.rs index b56b28a0..40729e99 100644 --- a/src/window.rs +++ b/src/window.rs @@ -14,6 +14,7 @@ use std::convert::From; use std::fmt::{self, Display}; use std::ops::Deref; +use std::sync::Mutex; use gl; use glutin; @@ -26,13 +27,13 @@ use glutin; /// /// This will fail horribly if more than one window is created. Don't do that :) fn window_resize_handler(width: u32, height: u32) { - unsafe { - RESIZE_CALLBACK.as_ref().map(|func| func(width, height)); - } + RESIZE_CALLBACK.lock().unwrap().as_ref().map(|func| (*func)(width, height)); } -/// The resize callback invoked by `window_resize_handler` -static mut RESIZE_CALLBACK: Option> = None; +lazy_static! { + /// The resize callback invoked by `window_resize_handler` + static ref RESIZE_CALLBACK: Mutex>> = Mutex::new(None); +} /// Window errors #[derive(Debug)] @@ -238,10 +239,9 @@ impl Window { /// /// This method takes self mutably to ensure there's no race condition /// setting the callback. - pub fn set_resize_callback(&mut self, func: F) { - unsafe { - RESIZE_CALLBACK = Some(Box::new(func)); - } + pub fn set_resize_callback(&mut self, func: F) { + let mut guard = RESIZE_CALLBACK.lock().unwrap(); + *guard = Some(Box::new(func)); } pub fn inner_size_pixels(&self) -> Option>> {