diff --git a/src/libstd/uv_global_loop.rs b/src/libstd/uv_global_loop.rs index 710e439c347d..6f8820523706 100644 --- a/src/libstd/uv_global_loop.rs +++ b/src/libstd/uv_global_loop.rs @@ -101,11 +101,9 @@ fn spawn_high_level_loop() -> hl::high_level_loop unsafe { #debug("entering global libuv task"); weaken_task() {|weak_exit_po| #debug("global libuv task is now weak %?", weak_exit_po); - let loop_ptr = ll::loop_new(); let loop_msg_po = port::(); let loop_msg_ch = loop_msg_po.chan(); hl::run_high_level_loop( - loop_ptr, loop_msg_po, // before_run {|async_handle| @@ -128,7 +126,6 @@ fn spawn_high_level_loop() -> hl::high_level_loop unsafe { async_handle); } ); - ll::loop_delete(loop_ptr); #debug("global libuv task is leaving weakened state"); }; #debug("global libuv task exiting"); diff --git a/src/libstd/uv_hl.rs b/src/libstd/uv_hl.rs index 0b4e23674a61..5b734af43247 100644 --- a/src/libstd/uv_hl.rs +++ b/src/libstd/uv_hl.rs @@ -60,12 +60,12 @@ the loop's msg port * before_tear_down - called just before the loop invokes `uv_close()` on the provided `async_handle`. `uv_run` should return shortly after "] -unsafe fn run_high_level_loop(loop_ptr: *c_void, - msg_po: port, +unsafe fn run_high_level_loop(msg_po: port, before_run: fn~(*ll::uv_async_t), before_msg_process: fn~(*ll::uv_async_t, bool) -> bool, before_tear_down: fn~(*ll::uv_async_t)) { + let loop_ptr = ll::loop_new(); // set up the special async handle we'll use to allow multi-task // communication with this loop let async = ll::async_t(); @@ -90,6 +90,7 @@ unsafe fn run_high_level_loop(loop_ptr: *c_void, // enter the loop... this blocks until the loop is done.. ll::run(loop_ptr); log(debug, "high-level loop ended"); + ll::loop_delete(loop_ptr); } #[doc = " @@ -233,11 +234,9 @@ mod test { let hl_loop_port = comm::port::(); let hl_loop_ch = comm::chan(hl_loop_port); task::spawn_sched(task::manual_threads(1u)) {|| - let loop_ptr = ll::loop_new(); let msg_po = comm::port::(); let msg_ch = comm::chan(msg_po); run_high_level_loop( - loop_ptr, msg_po, // before_run {|async_handle| @@ -261,7 +260,6 @@ mod test { log(debug,#fmt("hl test_loop b4_tear_down: async %?", async_handle)); }); - ll::loop_delete(loop_ptr); comm::send(exit_ch, ()); }; ret comm::recv(hl_loop_port);