Log: Some gotos removed.
This commit is contained in:
@ -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;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user