--- mqtt/src/mqttd_calls.c 2012/06/01 10:39:48 1.2.2.19 +++ mqtt/src/mqttd_calls.c 2012/06/01 13:13:40 1.2.2.21 @@ -30,14 +30,13 @@ mkPkt(void * __restrict data, int dlen) } static inline void -freePkt(struct tagPkt ** __restrict p) +freePkt(struct tagPkt * __restrict p) { - if (!p || !*p) + if (!p) return; - io_freeVar(&(*p)->pkt_data); - io_free(*p); - *p = NULL; + io_freeVar(&p->pkt_data); + io_free(p); } static void * @@ -61,6 +60,7 @@ sendPacket(sched_task_t *task) } } + freePkt(p); return NULL; } @@ -194,6 +194,7 @@ cmdSUBSCRIBE(void *srv, int len, void *arg) struct tagStore *store; char buf[BUFSIZ]; void *ptr; + struct tagPkt *p = NULL; ioTRACE(2); @@ -259,13 +260,12 @@ cmdSUBSCRIBE(void *srv, int len, void *arg) if (siz == -1) { ioDEBUG(5, "Error:: in msgSUBACK #%d - %s", mqtt_GetErrno(), mqtt_GetError()); goto end; - } - if ((siz = send(sess->sess_sock, sess->sess_buf->msg_base, siz, MSG_NOSIGNAL)) == -1) - ioSYSERR(0); - else { - ioDEBUG(5, "Sended %d bytes.", siz); + } else { + p = mkPkt(sess->sess_buf->msg_base, siz); memset(sess->sess_buf->msg_base, 0, sess->sess_buf->msg_len); } + + schedWrite(root, sendPacket, p, sess->sess_sock, NULL, 0); end: mqtt_subFree(&subs); return 0; @@ -280,6 +280,7 @@ cmdUNSUBSCRIBE(void *srv, int len, void *arg) u_short mid = 0; register int i; struct tagStore *store, *tmp; + struct tagPkt *p = NULL; ioTRACE(2); @@ -319,13 +320,12 @@ cmdUNSUBSCRIBE(void *srv, int len, void *arg) if (siz == -1) { ioDEBUG(5, "Error:: in msgUNSUBACK #%d - %s", mqtt_GetErrno(), mqtt_GetError()); goto end; - } - if ((siz = send(sess->sess_sock, sess->sess_buf->msg_base, siz, MSG_NOSIGNAL)) == -1) - ioSYSERR(0); - else { - ioDEBUG(5, "Sended %d bytes.", siz); + } else { + p = mkPkt(sess->sess_buf->msg_base, siz); memset(sess->sess_buf->msg_base, 0, sess->sess_buf->msg_len); } + + schedWrite(root, sendPacket, p, sess->sess_sock, NULL, 0); end: mqtt_subFree(&subs); return 0;