From f6dfd37febceea60b33d29f6bd18c3893fefc535 Mon Sep 17 00:00:00 2001 From: Joshua Simmons Date: Wed, 11 Aug 2010 23:04:32 +1000 Subject: [PATCH] Work on object collection Adding __gc for socket objecs Adding NULL pointer check to context:term and socket:close --- zmq.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/zmq.c b/zmq.c index 3532c40..a9a8175 100644 --- a/zmq.c +++ b/zmq.c @@ -77,7 +77,12 @@ static int Lzmq_init(lua_State *L) static int Lzmq_term(lua_State *L) { zmq_ptr *ctx = luaL_checkudata(L, 1, MT_ZMQ_CONTEXT); - assert(zmq_term(ctx->ptr) == 0); + + if(ctx->ptr != NULL) { + assert(zmq_term(ctx->ptr) == 0); + ctx->ptr = NULL; + } + return 0; } @@ -103,7 +108,12 @@ static int Lzmq_socket(lua_State *L) static int Lzmq_close(lua_State *L) { zmq_ptr *s = luaL_checkudata(L, 1, MT_ZMQ_SOCKET); - assert(zmq_close(s->ptr) == 0); + + if(s->ptr != NULL) { + assert(zmq_close(s->ptr) == 0); + s->ptr = NULL; + } + return 0; } @@ -311,6 +321,7 @@ static const luaL_reg ctxmethods[] = { }; static const luaL_reg sockmethods[] = { + {"__gc", Lzmq_close}, {"close", Lzmq_close}, {"setopt", Lzmq_setsockopt}, {"getopt", Lzmq_getsockopt},