Index: main/logger.c =================================================================== --- main/logger.c (revision 375799) +++ main/logger.c (working copy) @@ -1155,7 +1155,10 @@ void close_logger(void) { struct logchannel *f = NULL; + struct verb *cur = NULL; + ast_cli_unregister_multiple(cli_logger, ARRAY_LEN(cli_logger)); + logger_initialized = 0; /* Stop logger thread */ @@ -1174,13 +1177,20 @@ qlog = NULL; } - AST_RWLIST_TRAVERSE(&logchannels, f, list) { + while ((f = AST_LIST_REMOVE_HEAD(&logchannels, list))) { if (f->fileptr && (f->fileptr != stdout) && (f->fileptr != stderr)) { fclose(f->fileptr); f->fileptr = NULL; } + ast_free(f); } + AST_RWLIST_WRLOCK(&verbosers); + while ((cur = AST_LIST_REMOVE_HEAD(&verbosers, list))) { + ast_free(cur); + } + AST_RWLIST_UNLOCK(&verbosers); + closelog(); /* syslog */ AST_RWLIST_UNLOCK(&logchannels);