--- mqtt/src/mqttd.c 2012/04/24 08:06:09 1.2.2.5 +++ mqtt/src/mqttd.c 2012/04/24 13:54:50 1.2.2.6 @@ -16,7 +16,7 @@ pthread_mutex_t mtx_sess, mtx_pub; FILE *logg; extern char compiled[], compiledby[], compilehost[]; static char szCfgName[MAXPATHLEN]; -intptr_t Kill; +volatile intptr_t Kill; static void @@ -35,6 +35,7 @@ static void sigHand(int sig) { int stat; + struct tagSession *sess; switch (sig) { case SIGHUP: @@ -48,6 +49,12 @@ sigHand(int sig) case SIGTERM: ioDEBUG(1, "Terminate MQTT service in progress"); Kill++; + + SESS_LOCK; + TAILQ_FOREACH(sess, &Sessions, sess_node) + if (sess->sess_tid) + pthread_cancel(sess->sess_tid); + SESS_UNLOCK; break; case SIGCHLD: while (waitpid(-1, &stat, WNOHANG) > 0);