--- mqtt/src/daemon.c 2012/05/28 08:08:21 1.2.2.34 +++ mqtt/src/daemon.c 2012/06/01 10:39:48 1.2.2.35 @@ -24,6 +24,7 @@ initSession(int sock, ait_val_t * __restrict v) memset(sess, 0, sizeof(struct tagSession)); SLIST_INIT(&sess->sess_subscr); + SLIST_INIT(&sess->sess_sndpkt); str = cfg_getAttribute(&cfg, "mqttd", "retry"); if (!str) @@ -64,6 +65,7 @@ static void finiSession(struct tagSession *sess) { struct tagStore *store; + struct tagPkt *p; ioTRACE(5); @@ -88,6 +90,13 @@ finiSession(struct tagSession *sess) free(store->st_subscr.sub_value.msg_base); io_free(store); + } + + while ((p = SLIST_FIRST(&sess->sess_sndpkt))) { + SLIST_REMOVE_HEAD(&sess->sess_sndpkt, pkt_node); + + io_freeVar(&p->pkt_data); + io_free(p); } if (sess->sess_will.msg)