rt: adding rust_uv_* binding for kernel malloc and free'ing :/

I need these in the context of doing various malloc/free operations for
libuv structs that need to live in the heap, because of API workflow
(there's no stack to put them in). This has cropped up several times
when impl'ing the high-level API for things like timers, but I've decided
to take the plunge and use this approach for the net::tcp module.

Technically, this can be avoided by spawning a new
task that contains the needed memory structures on its stack and then
having it block for the duration of the time we need that memory to be
valid (this is what I did in std::timer). Exposing this API provides a
much lower overhead way to address
the issue, albeit with safety concerns. The main mitigation policy should
be to use malloc/free with libuv handles only when the handles, are then
associated with a resource or class-with-dtor. So we have a finite lifetime
for the object and can gaurantee a free(), barring a runtime crash (in
which case you have bigger problems!)
This commit is contained in:
Jeff Olson 2012-05-14 07:01:23 -07:00 committed by Brian Anderson
parent 733881d852
commit 8769409612
2 changed files with 12 additions and 0 deletions

@ -450,3 +450,13 @@ rust_uv_get_kernel_global_chan_ptr() {
LOG(task, stdlib,"global loop val: %lu", (unsigned long int)*result);
return result;
}
extern "C" void*
rust_uv_current_kernel_malloc(size_t size) {
return current_kernel_malloc(size, "rust_uv_current_kernel_malloc");
}
extern "C" void*
rust_uv_current_kernel_free(void* mem) {
return current_kernel_free(mem);
}

@ -143,6 +143,8 @@ rust_uv_set_data_for_req
rust_uv_get_base_from_buf
rust_uv_get_len_from_buf
rust_uv_get_kernel_global_chan_ptr
rust_uv_current_kernel_malloc
rust_uv_current_kernel_free
rust_dbg_lock_create
rust_dbg_lock_destroy
rust_dbg_lock_lock