Fixed some logs not being flushed

This commit is contained in:
Markus Makela
2014-11-27 17:31:31 +02:00
parent 013dd8e575
commit 6def2b611e

View File

@ -96,6 +96,7 @@ static int lmlock;
static logmanager_t* lm; static logmanager_t* lm;
static bool flushall_flag; static bool flushall_flag;
static bool flushall_started_flag; static bool flushall_started_flag;
static bool flushall_done_flag;
/** Writer thread structure */ /** Writer thread structure */
struct filewriter_st { struct filewriter_st {
@ -2803,7 +2804,7 @@ static void* thr_filewriter_fun(
int i; int i;
blockbuf_state_t flush_blockbuf; /**< flush single block buffer. */ blockbuf_state_t flush_blockbuf; /**< flush single block buffer. */
bool flush_logfile; /**< flush logfile */ bool flush_logfile; /**< flush logfile */
bool do_flush = false; bool do_flushall = false;
bool rotate_logfile; /*< close current and open new file */ bool rotate_logfile; /*< close current and open new file */
size_t vn1; size_t vn1;
size_t vn2; size_t vn2;
@ -2835,6 +2836,10 @@ static void* thr_filewriter_fun(
/** /**
* Get file pointer of current logfile. * Get file pointer of current logfile.
*/ */
do_flushall = thr_flushall_check();
file = fwr->fwr_file[i]; file = fwr->fwr_file[i];
lf = &lm->lm_logfile[(logfile_id_t)i]; lf = &lm->lm_logfile[(logfile_id_t)i];
@ -2905,7 +2910,7 @@ static void* thr_filewriter_fun(
if (bb->bb_buf_used != 0 && if (bb->bb_buf_used != 0 &&
(flush_blockbuf == BB_FULL || (flush_blockbuf == BB_FULL ||
flush_logfile || flush_logfile ||
thr_flushall_check())) do_flushall))
{ {
/** /**
* buffer is at least half-full * buffer is at least half-full
@ -2924,7 +2929,7 @@ static void* thr_filewriter_fun(
(void *)bb->bb_buf, (void *)bb->bb_buf,
bb->bb_buf_used, bb->bb_buf_used,
(flush_logfile || (flush_logfile ||
thr_flushall_check())); do_flushall));
if (err) if (err)
{ {
fprintf(stderr, fprintf(stderr,
@ -2971,6 +2976,14 @@ static void* thr_filewriter_fun(
* Loop is restarted to ensure that all logfiles are * Loop is restarted to ensure that all logfiles are
* flushed. * flushed.
*/ */
if(flushall_started_flag){
flushall_started_flag = false;
flushall_done_flag = true;
i = LOGFILE_FIRST;
goto retry_flush_on_exit;
}
if (!thr_flushall_check() && skygw_thread_must_exit(thr)) if (!thr_flushall_check() && skygw_thread_must_exit(thr))
{ {
flushall_logfiles(true); flushall_logfiles(true);
@ -2979,8 +2992,8 @@ static void* thr_filewriter_fun(
} }
}/* for */ }/* for */
if(flushall_started_flag){ if(flushall_done_flag){
flushall_started_flag = false; flushall_done_flag = false;
flushall_logfiles(false); flushall_logfiles(false);
skygw_message_send(fwr->fwr_clientmes); skygw_message_send(fwr->fwr_clientmes);
} }
@ -3091,7 +3104,7 @@ bool thr_flushall_check()
bool rval = false; bool rval = false;
simple_mutex_lock(&lm->lm_mutex,true); simple_mutex_lock(&lm->lm_mutex,true);
rval = flushall_flag; rval = flushall_flag;
if(rval && !flushall_started_flag){ if(rval && !flushall_started_flag && !flushall_done_flag){
flushall_started_flag = true; flushall_started_flag = true;
} }
simple_mutex_unlock(&lm->lm_mutex); simple_mutex_unlock(&lm->lm_mutex);