about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorJeff Olson <olson.jeffery@gmail.com>2013-01-30 10:28:27 -0800
committerKerra Olson <kerra@mbp.local>2013-02-10 11:51:05 -0800
commitdfcdb6eb729fa51cac47f219a90a9f894819f343 (patch)
treeed436c020a967a4184854a37aedd800f33c0dfc8 /src/libstd
parent3a813e29b64dac9502f16b8cbaae6a6d16f9a687 (diff)
rt/std: update of libuv API glue for libuv submodule update
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/uv_iotask.rs14
-rw-r--r--src/libstd/uv_ll.rs215
2 files changed, 104 insertions, 125 deletions
diff --git a/src/libstd/uv_iotask.rs b/src/libstd/uv_iotask.rs
index a44fef54b72..da5fbc3438a 100644
--- a/src/libstd/uv_iotask.rs
+++ b/src/libstd/uv_iotask.rs
@@ -185,15 +185,19 @@ fn begin_teardown(data: *IoTaskLoopData) {
         ll::close(async_handle as *c_void, tear_down_close_cb);
     }
 }
+extern fn tear_down_walk_cb(handle: *libc::c_void, arg: *libc::c_void) {
+    log(debug, ~"IN TEARDOWN WALK CB BOYEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE");
+    // pretty much, if we still have an active handle and it is *not*
+    // the async handle that facilities global loop communication, we
+    // want to barf out and fail
+    assert handle == arg;
+}
 
 extern fn tear_down_close_cb(handle: *ll::uv_async_t) {
     unsafe {
         let loop_ptr = ll::get_loop_for_uv_handle(handle);
-        let loop_refs = ll::loop_refcount(loop_ptr);
-        log(debug,
-            fmt!("tear_down_close_cb called, closing handle at %? refs %?",
-                 handle, loop_refs));
-        assert loop_refs == 1i32;
+        log(debug, ~"in tear_down_close_cb");
+        ll::walk(loop_ptr, tear_down_walk_cb, handle as *libc::c_void);
     }
 }
 
diff --git a/src/libstd/uv_ll.rs b/src/libstd/uv_ll.rs
index a3e02ca7070..fb8bbcebf7f 100644
--- a/src/libstd/uv_ll.rs
+++ b/src/libstd/uv_ll.rs
@@ -90,7 +90,7 @@ pub struct uv_stream_t {
     fields: uv_handle_fields,
 }
 
-// 64bit unix size: 272
+// 64bit unix size: 216
 #[cfg(unix)]
 pub struct uv_tcp_t {
     fields: uv_handle_fields,
@@ -99,10 +99,8 @@ pub struct uv_tcp_t {
     a08: *u8, a09: *u8, a10: *u8, a11: *u8,
     a12: *u8, a13: *u8, a14: *u8, a15: *u8,
     a16: *u8, a17: *u8, a18: *u8, a19: *u8,
-    a20: *u8, a21: *u8, a22: *u8, a23: *u8,
-    a24: *u8, a25: *u8, a26: *u8, a27: *u8,
-    a28: *u8,
-    a30: uv_tcp_t_32bit_unix_riders,
+    a20: *u8, a21: *u8,
+    a22: uv_tcp_t_32bit_unix_riders,
 }
 // 32bit unix size: 328 (164)
 #[cfg(target_arch="x86_64")]
@@ -113,8 +111,6 @@ pub struct uv_tcp_t_32bit_unix_riders {
 #[cfg(target_arch="arm")]
 pub struct uv_tcp_t_32bit_unix_riders {
     a29: *u8, a30: *u8, a31: *u8,
-    a32: *u8, a33: *u8, a34: *u8,
-    a35: *u8, a36: *u8,
 }
 
 // 32bit win32 size: 240 (120)
@@ -130,11 +126,11 @@ pub struct uv_tcp_t {
     a24: *u8, a25: *u8,
 }
 
-// unix size: 48
+// unix size: 64
 #[cfg(unix)]
 pub struct uv_connect_t {
     a00: *u8, a01: *u8, a02: *u8, a03: *u8,
-    a04: *u8, a05: *u8,
+    a04: *u8, a05: *u8, a06: *u8, a07: *u8
 }
 // win32 size: 88 (44)
 #[cfg(windows)]
@@ -152,7 +148,7 @@ pub struct uv_buf_t {
 // no gen stub method.. should create
 // it via uv::direct::buf_init()
 
-// unix size: 144
+// unix size: 160
 #[cfg(unix)]
 pub struct uv_write_t {
     fields: uv_handle_fields,
@@ -164,12 +160,13 @@ pub struct uv_write_t {
 }
 #[cfg(target_arch="x86_64")]
 pub struct uv_write_t_32bit_unix_riders {
-    a13: *u8,
+    a13: *u8, a14: *u8, a15: *u8
 }
 #[cfg(target_arch="x86")]
 #[cfg(target_arch="arm")]
 pub struct uv_write_t_32bit_unix_riders {
-    a13: *u8, a14: *u8,
+    a13: *u8, a14: *u8, a15: *u8,
+    a16: *u8,
 }
 // win32 size: 136 (68)
 #[cfg(windows)]
@@ -180,15 +177,14 @@ pub struct uv_write_t {
     a08: *u8, a09: *u8, a10: *u8, a11: *u8,
     a12: *u8,
 }
-// 64bit unix size: 120
+// 64bit unix size: 96
 // 32bit unix size: 152 (76)
 #[cfg(unix)]
 pub struct uv_async_t {
     fields: uv_handle_fields,
     a00: *u8, a01: *u8, a02: *u8, a03: *u8,
-    a04: *u8, a05: *u8, a06: *u8, a07: *u8,
-    a08: *u8, a09: *u8,
-    a11: uv_async_t_32bit_unix_riders,
+    a04: *u8, a05: *u8, a06: *u8,
+    a07: uv_async_t_32bit_unix_riders,
 }
 #[cfg(target_arch="x86_64")]
 pub struct uv_async_t_32bit_unix_riders {
@@ -197,7 +193,7 @@ pub struct uv_async_t_32bit_unix_riders {
 #[cfg(target_arch="x86")]
 #[cfg(target_arch="arm")]
 pub struct uv_async_t_32bit_unix_riders {
-    a10: *u8, a11: *u8, a12: *u8, a13: *u8,
+    a10: *u8,
 }
 // win32 size 132 (68)
 #[cfg(windows)]
@@ -209,7 +205,7 @@ pub struct uv_async_t {
     a12: *u8,
 }
 
-// 64bit unix size: 128
+// 64bit unix size: 120
 // 32bit unix size: 84
 #[cfg(unix)]
 pub struct uv_timer_t {
@@ -221,13 +217,12 @@ pub struct uv_timer_t {
 }
 #[cfg(target_arch="x86_64")]
 pub struct uv_timer_t_32bit_unix_riders {
-    a10: *u8, a11: *u8,
+    a10: *u8,
 }
 #[cfg(target_arch="x86")]
 #[cfg(target_arch="arm")]
 pub struct uv_timer_t_32bit_unix_riders {
-    a10: *u8, a11: *u8, a12: *u8, a13: *u8,
-    a14: *u8, a15: *u8, a16: *u8,
+    a10: *u8, a11: *u8, a12: *u8
 }
 // win32 size: 64
 #[cfg(windows)]
@@ -325,7 +320,8 @@ pub mod addrinfo_impl {
 // unix size: 72
 pub struct uv_getaddrinfo_t {
     a00: *u8, a01: *u8, a02: *u8, a03: *u8, a04: *u8, a05: *u8,
-    a06: *u8, a07: *u8, a08: *u8,
+    a06: *u8, a07: *u8, a08: *u8, a09: *u8,
+    a10: *u8, a11: *u8, a12: *u8, a13: *u8, a14: *u8, a15: *u8
 }
 
 pub mod uv_ll_struct_stubgen {
@@ -378,12 +374,8 @@ pub mod uv_ll_struct_stubgen {
                     a15: 0 as *u8,
                     a16: 0 as *u8, a17: 0 as *u8, a18: 0 as *u8,
                     a19: 0 as *u8,
-                    a20: 0 as *u8, a21: 0 as *u8, a22: 0 as *u8,
-                    a23: 0 as *u8,
-                    a24: 0 as *u8, a25: 0 as *u8, a26: 0 as *u8,
-                    a27: 0 as *u8,
-                    a28: 0 as *u8,
-                    a30: uv_tcp_t_32bit_unix_riders { a29: 0 as *u8 },
+                    a20: 0 as *u8, a21: 0 as *u8,
+                    a22: uv_tcp_t_32bit_unix_riders { a29: 0 as *u8 },
                 }
             }
             #[cfg(target_arch="x86")]
@@ -405,15 +397,9 @@ pub mod uv_ll_struct_stubgen {
                     a15: 0 as *u8,
                     a16: 0 as *u8, a17: 0 as *u8, a18: 0 as *u8,
                     a19: 0 as *u8,
-                    a20: 0 as *u8, a21: 0 as *u8, a22: 0 as *u8,
-                    a23: 0 as *u8,
-                    a24: 0 as *u8, a25: 0 as *u8, a26: 0 as *u8,
-                    a27: 0 as *u8,
-                    a28: 0 as *u8,
-                    a30: uv_tcp_t_32bit_unix_riders {
+                    a20: 0 as *u8, a21: 0 as *u8,
+                    a22: uv_tcp_t_32bit_unix_riders {
                         a29: 0 as *u8, a30: 0 as *u8, a31: 0 as *u8,
-                        a32: 0 as *u8, a33: 0 as *u8, a34: 0 as *u8,
-                        a35: 0 as *u8, a36: 0 as *u8,
                     },
                 }
             }
@@ -447,7 +433,8 @@ pub mod uv_ll_struct_stubgen {
         uv_connect_t {
             a00: 0 as *u8, a01: 0 as *u8, a02: 0 as *u8,
             a03: 0 as *u8,
-            a04: 0 as *u8, a05: 0 as *u8,
+            a04: 0 as *u8, a05: 0 as *u8, a06: 0 as *u8,
+            a07: 0 as *u8
         }
     }
     #[cfg(windows)]
@@ -474,9 +461,7 @@ pub mod uv_ll_struct_stubgen {
                 a00: 0 as *u8, a01: 0 as *u8, a02: 0 as *u8,
                 a03: 0 as *u8,
                 a04: 0 as *u8, a05: 0 as *u8, a06: 0 as *u8,
-                a07: 0 as *u8,
-                a08: 0 as *u8, a09: 0 as *u8,
-                a11: uv_async_t_32bit_unix_riders { a10: 0 as *u8 },
+                a07: uv_async_t_32bit_unix_riders { a10: 0 as *u8 },
             }
         }
         #[cfg(target_arch = "x86")]
@@ -491,11 +476,8 @@ pub mod uv_ll_struct_stubgen {
                 a00: 0 as *u8, a01: 0 as *u8, a02: 0 as *u8,
                 a03: 0 as *u8,
                 a04: 0 as *u8, a05: 0 as *u8, a06: 0 as *u8,
-                a07: 0 as *u8,
-                a08: 0 as *u8, a09: 0 as *u8,
-                a11: uv_async_t_32bit_unix_riders {
-                    a10: 0 as *u8, a11: 0 as *u8,
-                    a12: 0 as *u8, a13: 0 as *u8
+                a07: uv_async_t_32bit_unix_riders {
+                    a10: 0 as *u8,
                 }
             }
         }
@@ -534,7 +516,7 @@ pub mod uv_ll_struct_stubgen {
                 a07: 0 as *u8,
                 a08: 0 as *u8, a09: 0 as *u8,
                 a11: uv_timer_t_32bit_unix_riders {
-                    a10: 0 as *u8, a11: 0 as *u8
+                    a10: 0 as *u8
                 },
             }
         }
@@ -554,9 +536,7 @@ pub mod uv_ll_struct_stubgen {
                 a08: 0 as *u8, a09: 0 as *u8,
                 a11: uv_timer_t_32bit_unix_riders {
                     a10: 0 as *u8, a11: 0 as *u8,
-                    a12: 0 as *u8, a13: 0 as *u8,
-                    a14: 0 as *u8, a15: 0 as *u8,
-                    a16: 0 as *u8,
+                    a12: 0 as *u8,
                 },
             }
         }
@@ -595,7 +575,9 @@ pub mod uv_ll_struct_stubgen {
                 a08: 0 as *u8, a09: 0 as *u8, a10: 0 as *u8,
                 a11: 0 as *u8,
                 a12: 0 as *u8,
-                a14: uv_write_t_32bit_unix_riders { a13: 0 as *u8 },
+                a14: uv_write_t_32bit_unix_riders { a13: 0 as *u8,
+                                                   a14: 0 as *u8,
+                                                   a15: 0 as *u8},
             }
         }
         #[cfg(target_arch="x86")]
@@ -617,6 +599,8 @@ pub mod uv_ll_struct_stubgen {
                 a14: uv_write_t_32bit_unix_riders {
                     a13: 0 as *u8,
                     a14: 0 as *u8,
+                    a15: 0 as *u8,
+                    a16: 0 as *u8,
                 }
             }
         }
@@ -642,7 +626,9 @@ pub mod uv_ll_struct_stubgen {
         uv_getaddrinfo_t {
             a00: 0 as *u8, a01: 0 as *u8, a02: 0 as *u8, a03: 0 as *u8,
             a04: 0 as *u8, a05: 0 as *u8, a06: 0 as *u8, a07: 0 as *u8,
-            a08: 0 as *u8
+            a08: 0 as *u8, a09: 0 as *u8,
+            a10: 1 as *u8, a11: 1 as *u8, a12: 1 as *u8, a13: 1 as *u8,
+            a14: 1 as *u8, a15: 1 as *u8
         }
     }
 }
@@ -652,9 +638,10 @@ extern mod rustrt {
     // libuv public API
     unsafe fn rust_uv_loop_new() -> *libc::c_void;
     unsafe fn rust_uv_loop_delete(lp: *libc::c_void);
-    unsafe fn rust_uv_loop_refcount(loop_ptr: *libc::c_void) -> libc::c_int;
     unsafe fn rust_uv_run(loop_handle: *libc::c_void);
     unsafe fn rust_uv_close(handle: *libc::c_void, cb: *u8);
+    unsafe fn rust_uv_walk(loop_handle: *libc::c_void, cb: *u8,
+                           arg: *libc::c_void);
     unsafe fn rust_uv_async_send(handle: *uv_async_t);
     unsafe fn rust_uv_async_init(loop_handle: *libc::c_void,
                           async_handle: *uv_async_t,
@@ -796,10 +783,6 @@ pub unsafe fn loop_delete(loop_handle: *libc::c_void) {
     rustrt::rust_uv_loop_delete(loop_handle);
 }
 
-pub unsafe fn loop_refcount(loop_ptr: *libc::c_void) -> libc::c_int {
-    return rustrt::rust_uv_loop_refcount(loop_ptr);
-}
-
 pub unsafe fn run(loop_handle: *libc::c_void) {
     rustrt::rust_uv_run(loop_handle);
 }
@@ -808,6 +791,10 @@ pub unsafe fn close<T>(handle: *T, cb: *u8) {
     rustrt::rust_uv_close(handle as *libc::c_void, cb);
 }
 
+pub unsafe fn walk(loop_handle: *libc::c_void, cb: *u8, arg: *libc::c_void) {
+    rustrt::rust_uv_walk(loop_handle, cb, arg);
+}
+
 pub unsafe fn tcp_init(loop_handle: *libc::c_void, handle: *uv_tcp_t)
     -> libc::c_int {
     return rustrt::rust_uv_tcp_init(loop_handle, handle);
@@ -1126,7 +1113,7 @@ pub unsafe fn addrinfo_as_sockaddr_in6(input: *addrinfo) -> *sockaddr_in6 {
     rustrt::rust_uv_addrinfo_as_sockaddr_in6(input)
 }
 
-#[cfg(test)]
+//#[cfg(test)]
 pub mod test {
     use core::prelude::*;
 
@@ -1693,66 +1680,66 @@ pub mod test {
         }
     }
 
+    fn struct_size_check_common<TStruct>(t_name: ~str,
+                                         foreign_size: libc::c_uint) {
+        unsafe {
+            let rust_size = sys::size_of::<TStruct>();
+            let sizes_match = foreign_size as uint == rust_size;
+            if !sizes_match {
+                let output = fmt!(
+                    "STRUCT_SIZE FAILURE: %s -- actual: %u expected: %u",
+                    t_name, rust_size, foreign_size as uint);
+                log(debug, output);
+            }
+            assert sizes_match;
+        }
+    }
+
     // struct size tests
     #[test]
     fn test_uv_ll_struct_size_uv_tcp_t() {
         unsafe {
-            let foreign_handle_size =
-                ::uv_ll::rustrt::rust_uv_helper_uv_tcp_t_size();
-            let rust_handle_size = sys::size_of::<uv_tcp_t>();
-            let output = fmt!("uv_tcp_t -- foreign: %u rust: %u",
-                              foreign_handle_size as uint, rust_handle_size);
-            log(debug, output);
-            assert foreign_handle_size as uint == rust_handle_size;
+            struct_size_check_common::<uv_tcp_t>(
+                ~"uv_tcp_t",
+                ::uv_ll::rustrt::rust_uv_helper_uv_tcp_t_size()
+            );
         }
     }
     #[test]
     fn test_uv_ll_struct_size_uv_connect_t() {
         unsafe {
-            let foreign_handle_size =
-                ::uv_ll::rustrt::rust_uv_helper_uv_connect_t_size();
-            let rust_handle_size = sys::size_of::<uv_connect_t>();
-            let output = fmt!("uv_connect_t -- foreign: %u rust: %u",
-                              foreign_handle_size as uint, rust_handle_size);
-            log(debug, output);
-            assert foreign_handle_size as uint == rust_handle_size;
+            struct_size_check_common::<uv_connect_t>(
+                ~"uv_connect_t",
+                ::uv_ll::rustrt::rust_uv_helper_uv_connect_t_size()
+            );
         }
     }
     #[test]
     fn test_uv_ll_struct_size_uv_buf_t() {
         unsafe {
-            let foreign_handle_size =
-                ::uv_ll::rustrt::rust_uv_helper_uv_buf_t_size();
-            let rust_handle_size = sys::size_of::<uv_buf_t>();
-            let output = fmt!("uv_buf_t -- foreign: %u rust: %u",
-                              foreign_handle_size as uint, rust_handle_size);
-            log(debug, output);
-            assert foreign_handle_size as uint == rust_handle_size;
+            struct_size_check_common::<uv_buf_t>(
+                ~"uv_buf_t",
+                ::uv_ll::rustrt::rust_uv_helper_uv_buf_t_size()
+            );
         }
     }
     #[test]
     fn test_uv_ll_struct_size_uv_write_t() {
         unsafe {
-            let foreign_handle_size =
-                ::uv_ll::rustrt::rust_uv_helper_uv_write_t_size();
-            let rust_handle_size = sys::size_of::<uv_write_t>();
-            let output = fmt!("uv_write_t -- foreign: %u rust: %u",
-                              foreign_handle_size as uint, rust_handle_size);
-            log(debug, output);
-            assert foreign_handle_size as uint == rust_handle_size;
+            struct_size_check_common::<uv_write_t>(
+                ~"uv_write_t",
+                ::uv_ll::rustrt::rust_uv_helper_uv_write_t_size()
+            );
         }
     }
 
     #[test]
     fn test_uv_ll_struct_size_sockaddr_in() {
         unsafe {
-            let foreign_handle_size =
-                ::uv_ll::rustrt::rust_uv_helper_sockaddr_in_size();
-            let rust_handle_size = sys::size_of::<sockaddr_in>();
-            let output = fmt!("sockaddr_in -- foreign: %u rust: %u",
-                              foreign_handle_size as uint, rust_handle_size);
-            log(debug, output);
-            assert foreign_handle_size as uint == rust_handle_size;
+            struct_size_check_common::<sockaddr_in>(
+                ~"sockaddr_in",
+                ::uv_ll::rustrt::rust_uv_helper_sockaddr_in_size()
+            );
         }
     }
     #[test]
@@ -1790,26 +1777,20 @@ pub mod test {
     #[test]
     fn test_uv_ll_struct_size_uv_async_t() {
         unsafe {
-            let foreign_handle_size =
-                ::uv_ll::rustrt::rust_uv_helper_uv_async_t_size();
-            let rust_handle_size = sys::size_of::<uv_async_t>();
-            let output = fmt!("uv_async_t -- foreign: %u rust: %u",
-                              foreign_handle_size as uint, rust_handle_size);
-            log(debug, output);
-            assert foreign_handle_size as uint == rust_handle_size;
+            struct_size_check_common::<uv_async_t>(
+                ~"uv_async_t",
+                ::uv_ll::rustrt::rust_uv_helper_uv_async_t_size()
+            );
         }
     }
 
     #[test]
     fn test_uv_ll_struct_size_uv_timer_t() {
         unsafe {
-            let foreign_handle_size =
-                ::uv_ll::rustrt::rust_uv_helper_uv_timer_t_size();
-            let rust_handle_size = sys::size_of::<uv_timer_t>();
-            let output = fmt!("uv_timer_t -- foreign: %u rust: %u",
-                              foreign_handle_size as uint, rust_handle_size);
-            log(debug, output);
-            assert foreign_handle_size as uint == rust_handle_size;
+            struct_size_check_common::<uv_timer_t>(
+                ~"uv_timer_t",
+                ::uv_ll::rustrt::rust_uv_helper_uv_timer_t_size()
+            );
         }
     }
 
@@ -1817,13 +1798,10 @@ pub mod test {
     #[ignore(cfg(target_os = "win32"))]
     fn test_uv_ll_struct_size_uv_getaddrinfo_t() {
         unsafe {
-            let foreign_handle_size =
-                ::uv_ll::rustrt::rust_uv_helper_uv_getaddrinfo_t_size();
-            let rust_handle_size = sys::size_of::<uv_getaddrinfo_t>();
-            let output = fmt!("uv_getaddrinfo_t -- foreign: %u rust: %u",
-                              foreign_handle_size as uint, rust_handle_size);
-            log(debug, output);
-            assert foreign_handle_size as uint == rust_handle_size;
+            struct_size_check_common::<uv_getaddrinfo_t>(
+                ~"uv_getaddrinfo_t",
+                ::uv_ll::rustrt::rust_uv_helper_uv_getaddrinfo_t_size()
+            );
         }
     }
     #[test]
@@ -1831,13 +1809,10 @@ pub mod test {
     #[ignore(cfg(target_os = "win32"))]
     fn test_uv_ll_struct_size_addrinfo() {
         unsafe {
-            let foreign_handle_size =
-                ::uv_ll::rustrt::rust_uv_helper_addrinfo_size();
-            let rust_handle_size = sys::size_of::<addrinfo>();
-            let output = fmt!("addrinfo -- foreign: %u rust: %u",
-                              foreign_handle_size as uint, rust_handle_size);
-            log(debug, output);
-            assert foreign_handle_size as uint == rust_handle_size;
+            struct_size_check_common::<uv_timer_t>(
+                ~"addrinfo",
+                ::uv_ll::rustrt::rust_uv_helper_uv_timer_t_size()
+            );
         }
     }
 }