Skip to content

Commit 23b0164

Browse files
olsonjefferybrson
authored andcommitted
---
yaml --- r: 15575 b: refs/heads/try c: 728f926 h: refs/heads/master i: 15573: 4279bf3 15571: 24789b7 15567: fb1576c v: v3
1 parent a6cecec commit 23b0164

File tree

2 files changed

+16
-20
lines changed

2 files changed

+16
-20
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
refs/heads/master: 61b1875c16de39c166b0f4d54bba19f9c6777d1a
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: 4a81779abd786ff22d71434c6d9a5917ea4cdfff
5-
refs/heads/try: 9a5d1974dc5114d6990db47cfd1d1edaabe01ce8
5+
refs/heads/try: 728f92604abc9603a211ddb2818ef7ce0b1c7a5f
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105

branches/try/src/libstd/uv_hl.rs

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,10 @@ fn ref_handle<T>(hl_loop: high_level_loop, handle: *T) unsafe {
166166
}
167167
#[doc="
168168
"]
169-
fn unref_handle<T>(hl_loop: high_level_loop, handle: *T) unsafe {
170-
send_high_level_msg(hl_loop, auto_unref_handle(handle as *libc::c_void));
169+
fn unref_handle<T>(hl_loop: high_level_loop, handle: *T,
170+
user_close_cb: *u8) unsafe {
171+
send_high_level_msg(hl_loop, auto_unref_handle(handle as *libc::c_void,
172+
user_close_cb));
171173
}
172174

173175
/////////////////////
@@ -232,8 +234,8 @@ crust fn high_level_wake_up_cb(async_handle: *libc::c_void,
232234
auto_ref_handle(handle) {
233235
high_level_ref(data, handle);
234236
}
235-
auto_unref_handle(handle) {
236-
high_level_unref(data, handle, false);
237+
auto_unref_handle(handle, user_close_cb) {
238+
high_level_unref(data, handle, false, user_close_cb);
237239
}
238240
tear_down {
239241
log(debug,"incoming hl_msg: got tear_down");
@@ -277,12 +279,8 @@ unsafe fn high_level_ref(data: *global_loop_data, handle: *libc::c_void) {
277279
(*data).refd_handles = refd_handles;
278280
}
279281

280-
crust fn auto_unref_close_cb(handle: *libc::c_void) {
281-
log(debug, "closing handle via high_level_unref");
282-
}
283-
284282
unsafe fn high_level_unref(data: *global_loop_data, handle: *libc::c_void,
285-
manual_unref: bool) {
283+
manual_unref: bool, user_close_cb: *u8) {
286284
log(debug,"incoming hl_msg: got auto_unref_handle");
287285
let mut refd_handles = (*data).refd_handles;
288286
let mut unrefd_handles = (*data).unrefd_handles;
@@ -299,7 +297,7 @@ unsafe fn high_level_unref(data: *global_loop_data, handle: *libc::c_void,
299297
}
300298
}
301299
else {
302-
ll::close(handle, auto_unref_close_cb);
300+
ll::close(handle, user_close_cb);
303301
let last_idx = vec::len(refd_handles) - 1u;
304302
let handle_idx = vec::position_elem(refd_handles, handle);
305303
alt handle_idx {
@@ -328,7 +326,7 @@ unsafe fn high_level_unref(data: *global_loop_data, handle: *libc::c_void,
328326
enum high_level_msg {
329327
interaction (fn~(*libc::c_void)),
330328
auto_ref_handle (*libc::c_void),
331-
auto_unref_handle (*libc::c_void),
329+
auto_unref_handle (*libc::c_void, *u8),
332330
tear_down
333331
}
334332

@@ -384,8 +382,6 @@ unsafe fn outer_global_loop_body(msg_po: comm::port<high_level_msg>) {
384382
};
385383

386384
ll::loop_delete(loop_ptr);
387-
// once we get here, show's over.
388-
rustrt::rust_uv_free_kernel_global_async_handle();
389385
}
390386

391387
unsafe fn inner_global_loop_body(weak_exit_po_in: comm::port<()>,
@@ -437,22 +433,22 @@ unsafe fn inner_global_loop_body(weak_exit_po_in: comm::port<()>,
437433
#[cfg(test)]
438434
mod test {
439435
crust fn simple_timer_close_cb(timer_ptr: *ll::uv_timer_t) unsafe {
440-
log(debug, "UNUSED...");
436+
log(debug, "user close cb for timer_ptr");
437+
let exit_ch_ptr = ll::get_data_for_uv_handle(
438+
timer_ptr as *libc::c_void) as *comm::chan<bool>;
439+
let exit_ch = *exit_ch_ptr;
440+
comm::send(exit_ch, true);
441441
}
442442
crust fn simple_timer_cb(timer_ptr: *ll::uv_timer_t,
443443
status: libc::c_int) unsafe {
444444
log(debug, "in simple timer cb");
445-
let exit_ch_ptr = ll::get_data_for_uv_handle(
446-
timer_ptr as *libc::c_void) as *comm::chan<bool>;
447445
ll::timer_stop(timer_ptr);
448446
let hl_loop = get_global_loop();
449447
interact(hl_loop) {|loop_ptr|
450448
log(debug, "closing timer");
451449
//ll::close(timer_ptr as *libc::c_void, simple_timer_close_cb);
452-
unref_handle(hl_loop, timer_ptr);
450+
unref_handle(hl_loop, timer_ptr, simple_timer_close_cb);
453451
log(debug, "about to deref exit_ch_ptr");
454-
let exit_ch = *exit_ch_ptr;
455-
comm::send(exit_ch, true);
456452
log(debug, "after msg sent on deref'd exit_ch");
457453
};
458454
log(debug, "exiting simple timer cb");

0 commit comments

Comments
 (0)