打印像素时SDL2出现泄漏

时间:2018-03-07 12:37:58

标签: c multithreading memory-leaks sdl sdl-2

我正在使用SDL2开发应用程序,并且我面临一些似乎与SDL_RenderDrawPoint功能相关的泄漏。

我发现泄漏的代码如下所示

void        set_img_pixel(t_img *img, int x, int y, t_color color)
{
    if (x >= 0 && x < img->res.width && y >= 0 && y < img->res.height)
    {
        pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
        pthread_mutex_lock(&img->mutex);
        SDL_SetRenderTarget(img->renderer, img->img);
        SDL_SetRenderDrawColor(img->renderer, color.r * 255, color.g * 255,
            color.b * 255, 255);
        SDL_RenderDrawPoint(img->renderer, x, y);
        pthread_mutex_unlock(&img->mutex);
        pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
    }
}

当我尝试发表评论SDL_SetRenderTargetSDL_RenderDrawPoint时,我没有泄密。 我的应用程序的每个线程都有一个泄漏,只有当线程完成工作时才会出现泄漏,这意味着当他们完成渲染并且他们调用pthread_exit(NULL)时。

这是调用我的set_img_pixel

的函数
static int      render_scene_p2(t_env *env)
{
    int             x;
    int             y;
    unsigned int    current_pixel_cpy;

    ft_lock_mult_thread(env);
    current_pixel_cpy = env->processed_pixels;
    env->processed_pixels++;
    ft_unlock_mult_thread(env);
    if (current_pixel_cpy >= (unsigned int)(env->scene->camera->res.height *
        env->scene->camera->res.width))
    {
        env->finish = 0;
        return (0);
    }
    y = current_pixel_cpy / env->scene->camera->res.width;
    x = current_pixel_cpy % env->scene->camera->res.width;
    set_img_pixel(&env->bg_img, x, y, get_pixel_color(env, x, y));
    return (1);
}

void            *render_scene(void *arg)
{
    t_env *env;

    env = (t_env *)arg;
    pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);
    while (1)
    {   
        if (render_scene_p2(env) == 0)
            break ;
    }
    pthread_exit(NULL);
}

0 个答案:

没有答案
相关问题