7b95ea5d11
* Changed to leak logger singleton to prevent hanging on Windows * Fix comment * Stopped using static vector Using std::vector will cause g_col to be released before the logger thread exits, causing the logger thread to touch freed memory causing a crash * Change so all logs are output before exit * Added debug logging * added more logging * Added logging * Explicitly free logger to avoid hanging on Win * Reverted to leak logger instance again * Removed debug log and fixed comment * Fixed comment --------- Co-authored-by: Georgi Gerganov <ggerganov@gmail.com>
44 lines
1.3 KiB
C++
44 lines
1.3 KiB
C++
#include "log.h"
|
|
|
|
#include <cstdlib>
|
|
#include <thread>
|
|
|
|
int main() {
|
|
const int n_thread = 8;
|
|
|
|
std::thread threads[n_thread];
|
|
for (int i = 0; i < n_thread; i++) {
|
|
threads[i] = std::thread([i]() {
|
|
const int n_msg = 1000;
|
|
|
|
for (int j = 0; j < n_msg; j++) {
|
|
const int log_type = std::rand() % 4;
|
|
|
|
switch (log_type) {
|
|
case 0: LOG_INF("Thread %d: %d\n", i, j); break;
|
|
case 1: LOG_WRN("Thread %d: %d\n", i, j); break;
|
|
case 2: LOG_ERR("Thread %d: %d\n", i, j); break;
|
|
case 3: LOG_DBG("Thread %d: %d\n", i, j); break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if (rand () % 10 < 5) {
|
|
common_log_set_timestamps(common_log_main(), rand() % 2);
|
|
common_log_set_prefix (common_log_main(), rand() % 2);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
for (int i = 0; i < n_thread; i++) {
|
|
threads[i].join();
|
|
}
|
|
|
|
common_log_flush(common_log_main());
|
|
// We explicitly free the logger singleton to avoid hanging on Windows
|
|
// related to timing issues of thread startup and DLL teardown
|
|
common_log_free(common_log_main());
|
|
return 0;
|
|
}
|