about summary refs log tree commit diff
path: root/src/libstd/timer.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstd/timer.rs')
-rw-r--r--src/libstd/timer.rs14
1 files changed, 4 insertions, 10 deletions
diff --git a/src/libstd/timer.rs b/src/libstd/timer.rs
index a7cb1762c4f..1c646f61d6a 100644
--- a/src/libstd/timer.rs
+++ b/src/libstd/timer.rs
@@ -30,7 +30,6 @@ fn delayed_send<T: send>(msecs: uint, ch: comm::chan<T>, val: T) {
             let timer_ptr = ptr::addr_of(timer);
             let hl_loop = uv::global_loop::get();
             uv::hl::interact(hl_loop) {|loop_ptr|
-                uv::hl::ref(hl_loop, timer_ptr);
                 let init_result = uv::ll::timer_init(loop_ptr, timer_ptr);
                 if (init_result == 0i32) {
                     let start_result = uv::ll::timer_start(
@@ -54,9 +53,6 @@ fn delayed_send<T: send>(msecs: uint, ch: comm::chan<T>, val: T) {
             comm::recv(timer_done_po);
             // notify the caller immediately
             comm::send(ch, copy(val));
-            // then clean up our handle
-            uv::hl::unref_and_close(hl_loop, timer_ptr,
-                                    delayed_send_close_cb);
             // uv_close for this timer has been processed
             comm::recv(timer_done_po);
         }
@@ -122,6 +118,7 @@ crust fn delayed_send_cb(handle: *uv::ll::uv_timer_t,
     let stop_result = uv::ll::timer_stop(handle);
     if (stop_result == 0i32) {
         comm::send(timer_done_ch, ());
+        uv::ll::close(handle, delayed_send_close_cb);
     }
     else {
         let loop_ptr = uv::ll::get_loop_for_uv_handle(handle);
@@ -140,14 +137,12 @@ crust fn delayed_send_close_cb(handle: *uv::ll::uv_timer_t) unsafe {
 #[cfg(test)]
 mod test {
     #[test]
-    #[ignore]
-    fn test_timer_simple_sleep_test() {
+    fn test_gl_timer_simple_sleep_test() {
         sleep(1u);
     }
 
     #[test]
-    #[ignore]
-    fn test_timer_recv_timeout_before_time_passes() {
+    fn test_gl_timer_recv_timeout_before_time_passes() {
         let expected = rand::rng().gen_str(16u);
         let test_po = comm::port::<str>();
         let test_ch = comm::chan(test_po);
@@ -165,8 +160,7 @@ mod test {
     }
 
     #[test]
-    #[ignore]
-    fn test_timer_recv_timeout_after_time_passes() {
+    fn test_gl_timer_recv_timeout_after_time_passes() {
         let expected = rand::rng().gen_str(16u);
         let fail_msg = rand::rng().gen_str(16u);
         let test_po = comm::port::<str>();