fix potential nullptr problem with Log when used from multiple threads during shutdown; reduce the intercycle delay to 2ms from 5ms for all main FNE threads;

pull/86/head
Bryan Biedenkapp 11 months ago
parent 7fc583c576
commit e533ac495f

@ -191,8 +191,10 @@ void LogFinalise()
#if defined(CATCH2_TEST_COMPILATION) #if defined(CATCH2_TEST_COMPILATION)
return; return;
#endif #endif
if (m_fpLog != nullptr) if (m_fpLog != nullptr) {
::fclose(m_fpLog); ::fclose(m_fpLog);
m_fpLog = nullptr;
}
#if !defined(_WIN32) #if !defined(_WIN32)
if (g_useSyslog) if (g_useSyslog)
closelog(); closelog();
@ -330,8 +332,10 @@ void Log(uint32_t level, const char *module, const char* file, const int lineNo,
if (!ret) if (!ret)
return; return;
::fprintf(m_fpLog, "%s\n", buffer); if (m_fpLog != nullptr) {
::fflush(m_fpLog); ::fprintf(m_fpLog, "%s\n", buffer);
::fflush(m_fpLog);
}
} else { } else {
#if !defined(_WIN32) #if !defined(_WIN32)
// convert our log level into syslog level // convert our log level into syslog level

@ -39,6 +39,8 @@ using namespace lookups;
// Constants // Constants
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
#define THREAD_CYCLE_THRESHOLD 2U
#define IDLE_WARMUP_MS 5U #define IDLE_WARMUP_MS 5U
#define DEFAULT_MTU_SIZE 496 #define DEFAULT_MTU_SIZE 496
@ -646,10 +648,18 @@ void* HostFNE::threadMasterNetwork(void* arg)
::pthread_setname_np(th->thread, threadName.c_str()); ::pthread_setname_np(th->thread, threadName.c_str());
#endif // _GNU_SOURCE #endif // _GNU_SOURCE
StopWatch stopWatch;
stopWatch.start();
if (fne->m_network != nullptr) { if (fne->m_network != nullptr) {
while (!g_killed) { while (!g_killed) {
uint32_t ms = stopWatch.elapsed();
stopWatch.start();
fne->m_network->processNetwork(); fne->m_network->processNetwork();
Thread::sleep(5U);
if (ms < THREAD_CYCLE_THRESHOLD)
Thread::sleep(THREAD_CYCLE_THRESHOLD);
} }
} }
@ -694,10 +704,18 @@ void* HostFNE::threadDiagNetwork(void* arg)
::pthread_setname_np(th->thread, threadName.c_str()); ::pthread_setname_np(th->thread, threadName.c_str());
#endif // _GNU_SOURCE #endif // _GNU_SOURCE
StopWatch stopWatch;
stopWatch.start();
if (fne->m_diagNetwork != nullptr) { if (fne->m_diagNetwork != nullptr) {
while (!g_killed) { while (!g_killed) {
uint32_t ms = stopWatch.elapsed();
stopWatch.start();
fne->m_diagNetwork->processNetwork(); fne->m_diagNetwork->processNetwork();
Thread::sleep(5U);
if (ms < THREAD_CYCLE_THRESHOLD)
Thread::sleep(THREAD_CYCLE_THRESHOLD);
} }
} }
@ -890,6 +908,7 @@ void* HostFNE::threadVirtualNetworking(void* arg)
stopWatch.start(); stopWatch.start();
while (!g_killed) { while (!g_killed) {
uint32_t ms = stopWatch.elapsed();
stopWatch.start(); stopWatch.start();
uint8_t packet[DEFAULT_MTU_SIZE]; uint8_t packet[DEFAULT_MTU_SIZE];
@ -908,7 +927,8 @@ void* HostFNE::threadVirtualNetworking(void* arg)
} }
} }
Thread::sleep(2U); if (ms < THREAD_CYCLE_THRESHOLD)
Thread::sleep(THREAD_CYCLE_THRESHOLD);
} }
} }
@ -968,7 +988,8 @@ void* HostFNE::threadVirtualNetworkingClock(void* arg)
break; break;
} }
Thread::sleep(2U); if (ms < THREAD_CYCLE_THRESHOLD)
Thread::sleep(THREAD_CYCLE_THRESHOLD);
} }
} }

Loading…
Cancel
Save

Powered by TurnKey Linux.