在linux中创建pthread时检测到堆栈粉碎

时间:2017-06-29 08:59:16

标签: c linux pthreads

我第一次跑,它没关系,第二次被破解,打印堆栈被粉碎检测到

int update_scheduler(MYSQL* website_link)
{
    if (mysql_query(website_link, UPDATE_SCHEDULER_SQL))
    {
        printf("Query Failed:%s", mysql_error(website_link));
        return -1;
    }

    MYSQL_RES* result;
    MYSQL_ROW row;
    result = mysql_store_result(website_link);

    while ((row = mysql_fetch_row(result)))
    {
        int task_type = atoi(row[1]), task_id = atoi(row[0]);
        switch (task_type)
        {
            case 5:
                create_task_thread(batch_send_email, task_id);
                break;
            case 10:
                batch_send_sms(task_id);
                break;
            case 15:
                batch_member_pay(task_id);
                break;
        }
    }

    mysql_free_result(result);
    return 0;
}

int create_task_thread(void* (*task)(void*), int id)
{
    pthread_t pid;

    int rc;
    rc = pthread_create(&pid, NULL, task, (void*)id);

    if (rc)
    {
        write_log_pid(pid);
        return -1;
    }
}

1 个答案:

答案 0 :(得分:0)

最后,我发现线程函数中的pthread_slef()是溢出的。所以gcc报告堆栈粉碎。