diff --git a/server/core/log_manager.cc b/server/core/log_manager.cc index 4528813e5..f9781d171 100644 --- a/server/core/log_manager.cc +++ b/server/core/log_manager.cc @@ -2321,7 +2321,9 @@ static void* thr_filewriter_fun(void* data) /** Inform log manager about the state. */ skygw_message_send(fwr->fwr_clientmes); - while (!skygw_thread_must_exit(thr)) + bool running = true; + + do { /** * Wait until new log arrival message appears. @@ -2347,14 +2349,23 @@ static void* thr_filewriter_fun(void* data) } } + bool send_message = false; + if (flushall_done_flag) { flushall_done_flag = false; flushall_logfiles(false); - skygw_message_send(fwr->fwr_clientmes); + send_message = true; } - } /* while (!skygw_thread_must_exit) */ + running = !skygw_thread_must_exit(thr); + + if (running && send_message) + { + skygw_message_send(fwr->fwr_clientmes); + } + } + while (running); ss_debug(skygw_thread_set_state(thr, THR_STOPPED)); /** Inform log manager that file writer thread has stopped. */ diff --git a/server/core/skygw_utils.cc b/server/core/skygw_utils.cc index 9ef3bac56..7afd5a60e 100644 --- a/server/core/skygw_utils.cc +++ b/server/core/skygw_utils.cc @@ -436,7 +436,9 @@ bool skygw_thread_set_exitflag(skygw_thread_t* thr, skygw_message_t* sendmes, skygw_message_wait(recmes); } + ss_dassert(simple_mutex_lock(thr->sth_mutex, true) == 0); ss_dassert(thr->sth_state == THR_STOPPED); + ss_dassert(simple_mutex_unlock(thr->sth_mutex) == 0); return_succp: return succp; diff --git a/server/core/test/testlog.c b/server/core/test/testlog.c index f4d713df7..7e4fd8237 100644 --- a/server/core/test/testlog.c +++ b/server/core/test/testlog.c @@ -221,8 +221,6 @@ int main(int argc, char* argv[]) err = MXS_NOTICE("%s", logstr); ss_dassert(err == 0); - succp = mxs_log_init(NULL, "/tmp", MXS_LOG_TARGET_FS); - ss_dassert(succp); skygw_log_enable(LOG_INFO); logstr = ("6.\tWrite to ERROR and thus also to MESSAGE and TRACE logs."); err = MXS_ERROR("%s", logstr);