void log_producer_env_destroy()

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();
}