--- mqtt/src/daemon.c 2012/07/03 07:52:36 1.2.2.45 +++ mqtt/src/daemon.c 2012/07/03 08:39:39 1.2.2.47 @@ -222,6 +222,7 @@ startSession(sched_task_t *task) int ret, wlen; mqtt_subscr_t *subs; struct timespec ts = { RETAIN_TIMEOUT, 0 }; + intptr_t sock; ioTRACE(4); @@ -285,7 +286,8 @@ startSession(sched_task_t *task) TAILQ_FOREACH(s, &Sessions, sess_node) if (!strcmp(s->sess_cid, sess->sess_cid)) { /* found stale session & disconnect it! */ - schedCancelby(root, taskMAX, CRITERIA_FD, (void*) s->sess_sock, NULL); + sock = s->sess_sock; + schedCancelby(root, taskMAX, CRITERIA_FD, (void*) sock, NULL); schedWrite(root, leaveClient, s, s->sess_sock, NULL, 0); break; } @@ -404,6 +406,8 @@ Run(int sock) schedPolling(root, &pl, NULL); schedRun(root, &Kill); + + schedCancelby(root, taskTIMER, CRITERIA_CALL, sendRetain, NULL); /* free all undeleted elements into lists */ TAILQ_FOREACH(sess, &Sessions, sess_node) {