Log: Some gotos removed.

This commit is contained in:
Johan Wikman
2015-11-10 22:55:10 +02:00
parent b4e9dcd567
commit b6783c24d0

View File

@ -268,10 +268,8 @@ static bool logfile_create(logfile_t* lf);
static bool logfile_open_file(filewriter_t* fw, logfile_t* lf); static bool logfile_open_file(filewriter_t* fw, logfile_t* lf);
static char* form_full_file_name(strpart_t* parts, logfile_t* lf, int seqnoidx); static char* form_full_file_name(strpart_t* parts, logfile_t* lf, int seqnoidx);
static bool filewriter_init(logmanager_t* logmanager, static bool filewriter_init(logmanager_t* logmanager,
filewriter_t* fw, filewriter_t* fw);
skygw_message_t* clientmes,
skygw_message_t* logmes);
static void filewriter_done(filewriter_t* filewriter); static void filewriter_done(filewriter_t* filewriter);
static bool fnames_conf_init(fnames_conf_t* fn, const char* logdir); static bool fnames_conf_init(fnames_conf_t* fn, const char* logdir);
static void fnames_conf_done(fnames_conf_t* fn); static void fnames_conf_done(fnames_conf_t* fn);
@ -383,7 +381,7 @@ static bool logmanager_init_nomutex(const char* ident,
* Initialize filewriter data and open the log file * Initialize filewriter data and open the log file
* for each log file type. * for each log file type.
*/ */
if (!filewriter_init(lm, fw, lm->lm_clientmes, lm->lm_logmes)) if (!filewriter_init(lm, fw))
{ {
err = 1; err = 1;
goto return_succ; goto return_succ;
@ -437,17 +435,17 @@ bool skygw_logmanager_init(const char* ident, const char* logdir, log_target_t t
acquire_lock(&lmlock); acquire_lock(&lmlock);
if (lm != NULL) if (!lm)
{
succ = logmanager_init_nomutex(ident, logdir, target);
}
else
{ {
// TODO: This is not ok. If the parameters are different then // TODO: This is not ok. If the parameters are different then
// TODO: we pretend something is what it is not. // TODO: we pretend something is what it is not.
succ = true; succ = true;
goto return_succ;
} }
succ = logmanager_init_nomutex(ident, logdir, target);
return_succ:
release_lock(&lmlock); release_lock(&lmlock);
return succ; return succ;
@ -515,34 +513,30 @@ void skygw_logmanager_done(void)
{ {
acquire_lock(&lmlock); acquire_lock(&lmlock);
if (lm == NULL) if (lm)
{ {
release_lock(&lmlock); CHK_LOGMANAGER(lm);
return; /** Mark logmanager unavailable */
} lm->lm_enabled = false;
CHK_LOGMANAGER(lm);
/** Mark logmanager unavailable */
lm->lm_enabled = false;
/** Wait until all users have left or someone shuts down /** Wait until all users have left or someone shuts down
* logmanager between lock release and acquire. * logmanager between lock release and acquire.
*/ */
while (lm != NULL && lm->lm_nlinks != 0) while (lm != NULL && lm->lm_nlinks != 0)
{ {
release_lock(&lmlock); release_lock(&lmlock);
pthread_yield(); pthread_yield();
acquire_lock(&lmlock); acquire_lock(&lmlock);
}
/** Shut down if not already shutted down. */
if (lm)
{
ss_dassert(lm->lm_nlinks == 0);
logmanager_done_nomutex();
}
} }
/** Logmanager was already shut down. Return successfully. */
if (lm == NULL)
{
goto return_void;
}
ss_dassert(lm->lm_nlinks == 0);
logmanager_done_nomutex();
return_void:
release_lock(&lmlock); release_lock(&lmlock);
} }
@ -2388,23 +2382,19 @@ static void logfile_free_memory(logfile_t* lf)
/** /**
* @node Initialize filewriter data and open the log file for each log file type. * @node Initialize filewriter data and open the log file for each log file type.
* *
* @param logmanager Log manager struct * @param logmanager Log manager struct
* @param fw File writer struct * @param fw File writer struct
* @param clientmes Messaging from file writer to log manager
* @param logmes Messaging from loggers to file writer thread
* *
* @return true if succeed, false if failed * @return true if succeed, false if failed
* *
*/ */
static bool filewriter_init(logmanager_t* logmanager, static bool filewriter_init(logmanager_t* logmanager, filewriter_t* fw)
filewriter_t* fw,
skygw_message_t* clientmes,
skygw_message_t* logmes)
{ {
bool succ = false; bool succ = false;
logfile_t* lf;
CHK_LOGMANAGER(logmanager); CHK_LOGMANAGER(logmanager);
assert(logmanager->lm_clientmes);
assert(logmanager->lm_logmes);
fw->fwr_state = INIT; fw->fwr_state = INIT;
#if defined(SS_DEBUG) #if defined(SS_DEBUG)
@ -2413,34 +2403,27 @@ static bool filewriter_init(logmanager_t* logmanager,
#endif #endif
fw->fwr_logmgr = logmanager; fw->fwr_logmgr = logmanager;
/** Message from filewriter to clients */ /** Message from filewriter to clients */
fw->fwr_logmes = logmes; fw->fwr_logmes = logmanager->lm_logmes;
/** Message from clients to filewriter */ /** Message from clients to filewriter */
fw->fwr_clientmes = clientmes; fw->fwr_clientmes = logmanager->lm_clientmes;
if (fw->fwr_logmes == NULL || fw->fwr_clientmes == NULL) logfile_t* lf = logmanager_get_logfile(logmanager);
if (logfile_open_file(fw, lf))
{ {
goto return_succ; fw->fwr_state = RUN;
CHK_FILEWRITER(fw);
succ = true;
} }
else
lf = logmanager_get_logfile(logmanager);
if (!(succ = logfile_open_file(fw, lf)))
{ {
fprintf(stderr, fprintf(stderr,
"Error : opening log file %s failed. Exiting " "Error : opening log file %s failed. Exiting "
"MaxScale\n", "MaxScale\n",
lf->lf_full_file_name); lf->lf_full_file_name);
goto return_succ;
}
fw->fwr_state = RUN;
CHK_FILEWRITER(fw);
succ = true;
return_succ:
if (!succ)
{
filewriter_done(fw); filewriter_done(fw);
} }
ss_dassert(fw->fwr_state == RUN || fw->fwr_state == DONE); ss_dassert(fw->fwr_state == RUN || fw->fwr_state == DONE);
return succ; return succ;
} }