about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorJeff Olson <olson.jeffery@gmail.com>2012-03-21 08:56:05 -0700
committerBrian Anderson <banderson@mozilla.com>2012-04-06 15:35:48 -0700
commitaf08aba5736aacae6662a2ac586bb559f0704cdc (patch)
tree7aba98465ba24a42cfb0cd5ce54aeed1f3a3dadd /src
parent3817ba7578a5044a5572f35de367b6ca31a35bc0 (diff)
some more stuff for libuv dealing w/ 1402.. should go away soon
Diffstat (limited to 'src')
-rw-r--r--src/libstd/uv.rs15
-rw-r--r--src/rt/rust_uv.cpp17
2 files changed, 22 insertions, 10 deletions
diff --git a/src/libstd/uv.rs b/src/libstd/uv.rs
index 67508df4916..c280caf0372 100644
--- a/src/libstd/uv.rs
+++ b/src/libstd/uv.rs
@@ -273,7 +273,7 @@ native mod rustrt {
         loop_handle: *ctypes::void,
         handle_ptr: *uv_tcp_t) -> ctypes::c_int;
     fn rust_uv_buf_init(base: *u8, len: ctypes::size_t)
-        -> uv_buf_t;
+        -> *ctypes::void;
     fn rust_uv_last_error(loop_handle: *ctypes::void) -> uv_err_t;
     fn rust_uv_ip4_addr(ip: *u8, port: ctypes::c_int)
         -> *ctypes::void;
@@ -352,10 +352,6 @@ mod direct {
     unsafe fn write_t() -> uv_write_t {
         ret gen_stub_uv_write_t();
     }
-    // FIXME: see github issue #1402
-    unsafe fn buf_init(input: *u8, len: uint) -> *ctypes::void {
-        ret rustrt::rust_uv_buf_init(input, len);
-    }
     unsafe fn get_loop_for_uv_handle(handle: *ctypes::void)
         -> *ctypes::void {
         ret rustrt::rust_uv_get_loop_for_uv_handle(handle);
@@ -373,6 +369,10 @@ mod direct {
         rustrt::rust_uv_set_data_for_req(req, data);
     }
     // FIXME: see github issue #1402
+    unsafe fn buf_init(input: *u8, len: uint) -> *ctypes::void {
+        ret rustrt::rust_uv_buf_init(input, len);
+    }
+    // FIXME: see github issue #1402
     unsafe fn ip4_addr(ip: str, port: ctypes::c_int)
     -> *ctypes::void {
         let addr_vec = str::bytes(ip);
@@ -382,10 +382,9 @@ mod direct {
         io::println(#fmt("vec val: '%s' length: %u",ip_back, vec::len(addr_vec)));
         ret rustrt::rust_uv_ip4_addr(addr_vec_ptr, port);
     }
-
     // this is lame.
     // FIXME: see github issue #1402
-    unsafe fn ip4_addr_free(ptr: *ctypes::void) {
+    unsafe fn free_1402(ptr: *ctypes::void) {
         rustrt::rust_uv_free(ptr);
     }
 }
@@ -1033,7 +1032,7 @@ fn impl_uv_tcp_request() unsafe {
             direct::run(test_loop);
             io::println("after run tcp req loop");
             // FIXME: see github issue #1402
-            direct::ip4_addr_free(addr);
+            direct::free_1402(addr);
         }
         else {
            io::println("direct::tcp_connect() failure");
diff --git a/src/rt/rust_uv.cpp b/src/rt/rust_uv.cpp
index 2a575bd00e3..4735abdedcd 100644
--- a/src/rt/rust_uv.cpp
+++ b/src/rt/rust_uv.cpp
@@ -234,9 +234,22 @@ rust_uv_get_stream_handle_for_connect(uv_connect_t* connect) {
   return connect->handle;
 }
 
-extern "C" uv_buf_t
+static uv_buf_t
+current_kernel_malloc_alloc_cb(uv_handle_t* handle,
+							   size_t suggested_size) {
+  char* base_ptr = (char*)current_kernel_malloc(sizeof(char)
+											* suggested_size,
+										 "uv_buf_t_base_val");
+  return uv_buf_init(base_ptr, suggested_size);
+}
+
+// FIXME see issue #1402
+extern "C" void*
 rust_uv_buf_init(char* base, size_t len) {
-  return uv_buf_init(base, len);
+  uv_buf_t* buf_ptr = current_kernel_malloc(sizeof(uv_buf_t),
+											"uv_buf_t_1402");
+  *buf_ptr = uv_buf_init(base, len);
+  return buf_ptr;
 }
 
 extern "C" uv_loop_t*