Added timertest. Prevented GC-ed events from causing an abort.

Thu, 06 Sep 2007 00:05:55 -0400

author
Thomas Harning Jr <harningt@gmail.com>
date
Thu, 06 Sep 2007 00:05:55 -0400
changeset 25
5778073d2903
parent 24
cda8e1a2dfa2
child 26
a117895e867c

Added timertest. Prevented GC-ed events from causing an abort.

src/event_callback.c file | annotate | diff | comparison | revisions
test/timertest.lua file | annotate | diff | comparison | revisions
--- a/src/event_callback.c	Wed Sep 05 23:35:31 2007 -0400
+++ b/src/event_callback.c	Thu Sep 06 00:05:55 2007 -0400
@@ -23,7 +23,13 @@
 	lua_State* L;
 	int ret;
 	double newTimeout = -1;
-	assert(cb && cb->base && cb->base->loop_L);
+	assert(cb);
+	if(!cb->base) {
+		/* Callback has been collected... die */
+		/* TODO: What should really be done here... */
+		return;
+	}
+	assert(cb->base->loop_L);
 	L = cb->base->loop_L;
 	lua_rawgeti(L, LUA_REGISTRYINDEX, cb->callbackRef);
 	lua_pushinteger(L, event);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/timertest.lua	Thu Sep 06 00:05:55 2007 -0400
@@ -0,0 +1,19 @@
+require("luaevent.core")
+
+c = luaevent.core.new()
+local f = 100
+local function createEvent()
+	return c:addevent(nil, luaevent.core.EV_TIMEOUT, function(ev) io.write(".." .. f) f = f - 1 if f < 0 then return -1 end collectgarbage() end, 0.01)
+end
+ev = createEvent()
+print("TESTING Garbage-collect-safe version")
+c:loop()
+assert(f < 0, "DID NOT FINISH LOOPING")
+io.write("\n")
+print("TESTING Garbage-collect unsafe version")
+f = 100
+createEvent()
+c:loop()
+assert(f >= 0, "Did not perform expected collection")
+io.write("\n")
+print("Completed both tests")

mercurial