--- mqtt/src/daemon.c 2012/05/05 15:04:29 1.2.2.26 +++ mqtt/src/daemon.c 2012/05/05 15:16:34 1.2.2.27 @@ -153,10 +153,14 @@ dispatchSession(sched_task_t *task) do { /* dispatch message type */ if ((len = mqtt_srv_Dispatch(sess->sess_srv, ret, sess)) < 0) { - if (len == -1) + if (len == -1) { ioLIBERR(mqtt); - TAILQ_REMOVE(&Sessions, sess, sess_node); - finiSession(sess); + finiSession(sess); + } else if (len == -2) { + TAILQ_REMOVE(&Sessions, sess, sess_node); + finiSession(sess); + } else if (len == -3) + schedEvent(root, startSession, NULL, (u_long) TASK_FD(task), sess, ret); } else ret -= len; } while (len > 0 && ret > 0);