--- mqtt/src/daemon.c 2012/01/30 08:29:55 1.2.2.3 +++ mqtt/src/daemon.c 2012/01/30 13:39:22 1.2.2.4 @@ -27,6 +27,8 @@ initSession(int sock, ait_val_t * __restrict v) } else memset(sess, 0, sizeof(struct tagSession)); + pthread_mutex_init(&sess->sess_mtx, NULL); + TAILQ_INIT(&sess->sess_sndqueue); str = (const char*) cfg_GetAttribute(&cfg, CFG("mqttd"), CFG("retry")); @@ -79,6 +81,7 @@ finiSession(struct tagSession *sess, int preservSock) if (call.FiniSessPUB) call.FiniSessPUB(&cfg, pub, sess->sess_cid, sess->sess_user, "%"); + pthread_mutex_lock(&sess->sess_mtx); while ((store = TAILQ_FIRST(&sess->sess_sndqueue))) { TAILQ_REMOVE(&sess->sess_sndqueue, store, st_node); @@ -89,6 +92,8 @@ finiSession(struct tagSession *sess, int preservSock) free(store); } + pthread_mutex_unlock(&sess->sess_mtx); + pthread_mutex_destroy(&sess->sess_mtx); if (sess->sess_will.msg) free(sess->sess_will.msg); @@ -246,6 +251,7 @@ thrSession(struct tagSession *sess) case MQTT_TYPE_UNSUBSCRIBE: break; case MQTT_TYPE_PINGREQ: + ioDEBUG(5, "Exec PINGREQ session"); break; default: ioDEBUG(5, "Error:: Session %s, wrong command %d - DISCARDED",