in src/log_producer_client.c [54:89]
void log_producer_env_destroy()
{
if (s_init_flag == 0)
{
return;
}
s_init_flag = 0;
// destroy global send threads
if (g_send_threads != NULL) {
g_send_thread_destroy = 1;
aos_info_log("join global sender thread pool begin, thread count : %d", g_send_thread_count);
int32_t threadId = 0;
for (; threadId < g_send_thread_count; ++threadId)
{
THREAD_JOIN(g_send_threads[threadId]);
aos_info_log("join one global sender thread pool done, thread id : %d", threadId);
}
free(g_send_threads);
aos_info_log("flush out global sender queue begin");
while (log_queue_size(g_sender_data_queue) > 0)
{
// @note : we must process all data in queue, otherwise this will cause memory leak
log_producer_send_param * send_param = (log_producer_send_param *)log_queue_trypop(g_sender_data_queue);
log_producer_send_thread_global_inner(send_param);
}
aos_info_log("flush out global sender queue success");
log_queue_destroy(g_sender_data_queue);
g_sender_data_queue = NULL;
g_send_thread_destroy = 0;
g_send_thread_count = 0;
g_send_threads = NULL;
aos_info_log("join global sender thread pool success");
}
sls_log_destroy();
}