void _try_flush_loggroup()

in Sources/aliyun-log-c-sdk/log_producer_manager.c [73:107]


void _try_flush_loggroup(log_producer_manager * producer_manager)
{
    int32_t now_time = time(NULL);

    CS_ENTER(producer_manager->lock);
    if (producer_manager->builder != NULL && now_time - producer_manager->firstLogTime > producer_manager->producer_config->packageTimeoutInMS / 1000)
    {
        log_group_builder * builder = producer_manager->builder;
        producer_manager->builder = NULL;
        CS_LEAVE(producer_manager->lock);

        size_t loggroup_size = builder->loggroup_size;
        int rst = log_queue_push(producer_manager->loggroup_queue, builder);
        aos_debug_log("try push loggroup to flusher, size : %d, status : %d", (int)loggroup_size, rst);
        if (rst != 0)
        {
            aos_error_log("try push loggroup to flusher failed, force drop this log group, error code : %d", rst);
            if (producer_manager->send_done_function != NULL)
            {
              producer_manager->send_done_function(producer_manager->producer_config->logstore, LOG_PRODUCER_DROP_ERROR, loggroup_size, 0,
                NULL, "try push loggroup to flusher failed, force drop this log group", NULL, producer_manager->user_param);
            }
            log_group_destroy(builder);
        }
        else
        {
            producer_manager->totalBufferSize += loggroup_size;
            COND_SIGNAL(producer_manager->triger_cond);
        }
    }
    else
    {
        CS_LEAVE(producer_manager->lock);
    }
}