--- mqtt/src/daemon.c 2012/04/25 13:08:15 1.2.2.12 +++ mqtt/src/daemon.c 2012/04/25 13:33:53 1.2.2.13 @@ -230,7 +230,6 @@ thrSession(struct tagSession *sess) /* dispatch message type */ if (mqtt_srv_Dispatch(sess->sess_srv, sess)) ioLIBERR(mqtt); - locKill ^= locKill; switch (hdr->mqtt_msg.type) { case MQTT_TYPE_CONNECT: ioDEBUG(5, "Exec CONNECT session"); @@ -240,11 +239,22 @@ thrSession(struct tagSession *sess) io_freeVar(v); } else ioLIBERR(mqtt); - continue; + + SESS_LOCK; + TAILQ_REMOVE(&Sessions, sess, sess_node); + SESS_UNLOCK; + + locKill ^= locKill; + break; case MQTT_TYPE_DISCONNECT: ioDEBUG(5, "Exec DISCONNECT session"); finiSession(sess); - locKill = 42; + + SESS_LOCK; + TAILQ_REMOVE(&Sessions, sess, sess_node); + SESS_UNLOCK; + + locKill ^= locKill; continue; case MQTT_TYPE_PUBLISH: ioDEBUG(5, "Exec PUBLISH topic QoS=%d", hdr->mqtt_msg.qos);