Fix convertion of Ctx from cdata to lightuserdata for passing to sub-threads.

zmq3.0
Robert G. Jakabosky 15 years ago
parent 5423280848
commit 052d18ffb2

@ -19,6 +19,7 @@
-- THE SOFTWARE. -- THE SOFTWARE.
object "ZMQ_Ctx" { object "ZMQ_Ctx" {
sys_include"string.h",
error_on_null = "get_zmq_strerror()", error_on_null = "get_zmq_strerror()",
c_source [[ c_source [[
typedef struct ZMQ_Ctx ZMQ_Ctx; typedef struct ZMQ_Ctx ZMQ_Ctx;
@ -26,10 +27,19 @@ typedef struct ZMQ_Ctx ZMQ_Ctx;
destructor "term" { destructor "term" {
c_method_call "ZMQ_Error" "zmq_term" {} c_method_call "ZMQ_Error" "zmq_term" {}
}, },
method "lightuserdata" { method "lightuserdata" { override_this = true,
var_in{ "<any>", "this" },
var_out{ "void *", "ptr" }, var_out{ "void *", "ptr" },
c_source[[ c_source[[
${ptr} = ${this}; if(lua_isuserdata(L, ${this::idx})) {
${ptr} = lua_touserdata(L, ${this::idx});
} else {
/* check for LuaJIT's cdata. */
int tp = lua_type(L, ${this::idx});
if(strncmp("cdata", lua_typename(L, tp), 5) == 0) {
${ptr} = *((void **)lua_topointer(L, ${this::idx}));
}
}
]] ]]
}, },
method "socket" { method "socket" {

@ -145,9 +145,9 @@ c_function "init_ctx" {
ffi_source[[ ffi_source[[
local p_type = type(${ptr}) local p_type = type(${ptr})
if p_type == 'userdata' then if p_type == 'userdata' then
${ctx} = ffi.cast('void *', ${ptr}); ${ctx} = ffi.cast('ZMQ_Ctx *', ${ptr});
elseif p_type == 'cdata' then elseif p_type == 'cdata' and ffi.istype('void *', ${ptr}) then
${ctx} = ${ptr}; ${ctx} = ffi.cast('ZMQ_Ctx *', ${ptr});
else else
return error("expected lightuserdata/cdata<void *>"); return error("expected lightuserdata/cdata<void *>");
end end

Loading…
Cancel
Save