I have a C function with void* argument wich will be passed to callback and
I want to pass Rust record as the argument. The question is, how to
allocate record on memory but not on the stack? I've tried a lot of
different ways, but with same result: in callback function record data
looked as already destroyed.
example:
...
type data_rec = {
on_connect_cb: fn@(listner: *evconnlistener, sock: c_int) -> bool,
data: int,
data1: int
};
fn re_listener_new_bind(ev_base: *event_base, flags: [listner_flags], addr:
sockaddr,
on_connect: fn@(listner: *evconnlistener, sock: c_int) -> bool)
-> *evconnlistener unsafe {
...
// initialising callback:
let callback = unsafe{ {on_connect_cb: on_connect, data: 10, data1:
-10} }; // will the record be allocated on the stack?
ret ev::evconnlistener_new_bind(ev_base, connect_callback, data,
res_flags, -1 as c_int,
ptr::addr_of(a), l as c_int);
}
crust fn connect_callback(listner: *evconnlistener, sock: c_int,
sockaddr: *c_void, len: c_int, ptr: *c_void) unsafe {
let data = ptr as *data_rec;
io::println(#fmt("%u, data: %d, data1 %d", ptr as uint, (*data).data,
(*data).data1));
}
...
console output:
1088426520, data: 1088426784, data1 146814400
expected output:
1088426520, data: 10, data1 -10
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev