Remove create_lock in favor of lock_and_signal() (issue #2780)

This commit is contained in:
Eric Holk 2012-07-05 10:11:25 -07:00
parent 27cecbf1cf
commit 5bfb5cad3a
2 changed files with 6 additions and 8 deletions

View File

@ -88,7 +88,7 @@ type ex_data<T: send> = {lock: sys::lock_and_signal, data: T};
type exclusive<T: send> = arc_destruct<ex_data<T>>; type exclusive<T: send> = arc_destruct<ex_data<T>>;
fn exclusive<T:send >(-data: T) -> exclusive<T> { fn exclusive<T:send >(-data: T) -> exclusive<T> {
let data = ~{mut count: 1, data: {lock: sys::create_lock(), let data = ~{mut count: 1, data: {lock: sys::lock_and_signal(),
data: data}}; data: data}};
unsafe { unsafe {
let ptr = unsafe::reinterpret_cast(data); let ptr = unsafe::reinterpret_cast(data);

View File

@ -7,7 +7,7 @@ export min_align_of;
export pref_align_of; export pref_align_of;
export refcount; export refcount;
export log_str; export log_str;
export create_lock, lock_and_signal, condition, methods; export lock_and_signal, condition, methods;
enum type_desc = { enum type_desc = {
first_param: **libc::c_int, first_param: **libc::c_int,
@ -87,7 +87,9 @@ pure fn log_str<T>(t: T) -> str {
class lock_and_signal { class lock_and_signal {
let lock: rust_cond_lock; let lock: rust_cond_lock;
new(lock: rust_cond_lock) { self.lock = lock; } new() {
self.lock = rustrt::rust_create_cond_lock();
}
drop { rustrt::rust_destroy_cond_lock(self.lock); } drop { rustrt::rust_destroy_cond_lock(self.lock); }
} }
@ -101,10 +103,6 @@ class unlock {
drop { rustrt::rust_unlock_cond_lock(self.lock); } drop { rustrt::rust_unlock_cond_lock(self.lock); }
} }
fn create_lock() -> lock_and_signal {
lock_and_signal(rustrt::rust_create_cond_lock())
}
impl methods for lock_and_signal { impl methods for lock_and_signal {
unsafe fn lock<T>(f: fn() -> T) -> T { unsafe fn lock<T>(f: fn() -> T) -> T {
rustrt::rust_lock_cond_lock(self.lock); rustrt::rust_lock_cond_lock(self.lock);
@ -180,7 +178,7 @@ mod tests {
#[test] #[test]
#[ignore] // this can go into infinite loops #[ignore] // this can go into infinite loops
fn condition_variable() { fn condition_variable() {
let lock = arc::arc(create_lock()); let lock = arc::arc(lock_and_signal());
let lock2 = arc::clone(&lock); let lock2 = arc::clone(&lock);
do task::spawn |move lock2| { do task::spawn |move lock2| {