--- mqtt/src/mqttd.c 2012/04/15 21:48:23 1.2.2.3 +++ mqtt/src/mqttd.c 2012/04/24 13:54:50 1.2.2.6 @@ -9,13 +9,14 @@ io_enableDEBUG; cfg_root_t cfg; sessions_t Sessions; +pubs_t Pubs; sched_root_task_t *root; sqlite3 *acc, *pub; 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 @@ -34,6 +35,7 @@ static void sigHand(int sig) { int stat; + struct tagSession *sess; switch (sig) { case SIGHUP: @@ -43,10 +45,16 @@ sigHand(int sig) break; } - syslog(LOG_ERR, "Error:: can't reload #%d - %s", cfg_GetErrno(), cfg_GetError()); + ioLIBERR(cfg); 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); @@ -68,6 +76,7 @@ main(int argc, char **argv) ait_val_t v; TAILQ_INIT(&Sessions); + TAILQ_INIT(&Pubs); strlcpy(szCfgName, DEFAULT_CONFIG, sizeof szCfgName); while ((ch = getopt(argc, argv, "hvbc:")) != -1)