diff options
author | Corey Farrell <git@cfware.com> | 2016-01-05 18:12:54 -0500 |
---|---|---|
committer | Corey Farrell <git@cfware.com> | 2016-01-19 14:21:25 -0500 |
commit | 35a3e8cc7fa2ed0e9775dc0910c9d0b8d03d9850 (patch) | |
tree | f7a74c82c82489aae2314e95135c2b1535b90440 /main/logger.c | |
parent | 690ab5fba754dfde7db6af48416aeb4eb100e262 (diff) |
Refactor init_logger_chain locking.
This removes logchannels locking from init_logger_chain, puts the
responsibility on the caller. Adds locking around the one call that was
missing it.
ASTERISK-24833
Change-Id: I6cc42117338bf9575650a67bcb78ab1a33d7bad8
Diffstat (limited to 'main/logger.c')
-rw-r--r-- | main/logger.c | 33 |
1 files changed, 8 insertions, 25 deletions
diff --git a/main/logger.c b/main/logger.c index 73b8ee1a2..fac68d9b6 100644 --- a/main/logger.c +++ b/main/logger.c @@ -560,13 +560,14 @@ static struct logchannel *make_logchannel(const char *channel, const char *compo } /* \brief Read config, setup channels. - * \param locked The logchannels list is locked and this is a reload * \param altconf Alternate configuration file to read. * + * \pre logchannels list is write locked + * * \retval 0 Success * \retval -1 No config found or Failed */ -static int init_logger_chain(int locked, const char *altconf) +static int init_logger_chain(const char *altconf) { struct logchannel *chan; struct ast_config *cfg; @@ -578,10 +579,6 @@ static int init_logger_chain(int locked, const char *altconf) cfg = NULL; } - if (!locked) { - AST_RWLIST_WRLOCK(&logchannels); - } - /* Set defaults */ hostname[0] = '\0'; display_callids = 1; @@ -597,9 +594,6 @@ static int init_logger_chain(int locked, const char *altconf) ast_free(chan); } global_logmask = 0; - if (!locked) { - AST_RWLIST_UNLOCK(&logchannels); - } errno = 0; /* close syslog */ @@ -615,14 +609,8 @@ static int init_logger_chain(int locked, const char *altconf) chan->logmask = __LOG_WARNING | __LOG_NOTICE | __LOG_ERROR; memcpy(&chan->formatter, &logformatter_default, sizeof(chan->formatter)); - if (!locked) { - AST_RWLIST_WRLOCK(&logchannels); - } AST_RWLIST_INSERT_HEAD(&logchannels, chan, list); global_logmask |= chan->logmask; - if (!locked) { - AST_RWLIST_UNLOCK(&logchannels); - } return -1; } @@ -675,9 +663,6 @@ static int init_logger_chain(int locked, const char *altconf) } } - if (!locked) { - AST_RWLIST_WRLOCK(&logchannels); - } var = ast_variable_browse(cfg, "logfiles"); for (; var; var = var->next) { if (!(chan = make_logchannel(var->name, var->value, var->lineno, 0))) { @@ -697,10 +682,6 @@ static int init_logger_chain(int locked, const char *altconf) qlog = NULL; } - if (!locked) { - AST_RWLIST_UNLOCK(&logchannels); - } - ast_config_destroy(cfg); return 0; @@ -1055,7 +1036,7 @@ static int reload_logger(int rotate, const char *altconf) filesize_reload_needed = 0; - init_logger_chain(1 /* locked */, altconf); + init_logger_chain(altconf); ast_unload_realtime("queue_log"); if (logfiles.queue_log) { @@ -1153,7 +1134,7 @@ int ast_logger_rotate_channel(const char *log_channel) } } - init_logger_chain(1 /* locked */, NULL); + init_logger_chain(NULL); AST_RWLIST_UNLOCK(&logchannels); @@ -1725,7 +1706,9 @@ int init_logger(void) ast_mkdir(ast_config_AST_LOG_DIR, 0777); /* create log channels */ - res = init_logger_chain(0 /* locked */, NULL); + AST_RWLIST_WRLOCK(&logchannels); + res = init_logger_chain(NULL); + AST_RWLIST_UNLOCK(&logchannels); ast_verb_update(); logger_initialized = 1; if (res) { |