AST_LIST_LOCK(&logmsgs);
if (AST_LIST_EMPTY(&logmsgs)) {
if (close_logger_thread) {
+ AST_LIST_UNLOCK(&logmsgs);
break;
} else {
ast_cond_wait(&logcond, &logmsgs.lock);
closelog(); /* syslog */
AST_RWLIST_UNLOCK(&logchannels);
-
- return;
}
struct ast_callid *ast_create_callid(void)
/* If the logger thread is active, append it to the tail end of the list - otherwise skip that step */
if (logthread != AST_PTHREADT_NULL) {
AST_LIST_LOCK(&logmsgs);
- AST_LIST_INSERT_TAIL(&logmsgs, logmsg, list);
- ast_cond_signal(&logcond);
+ if (close_logger_thread) {
+ /* Logger is either closing or closed. We cannot log this message. */
+ ast_free(logmsg);
+ } else {
+ AST_LIST_INSERT_TAIL(&logmsgs, logmsg, list);
+ ast_cond_signal(&logcond);
+ }
AST_LIST_UNLOCK(&logmsgs);
} else {
logger_print_normal(logmsg);
logmsg_free(logmsg);
}
-
- return;
}
void ast_log(int level, const char *file, int line, const char *function, const char *fmt, ...)