mirror of
https://github.com/mpv-player/mpv
synced 2024-12-24 15:52:25 +00:00
wayland: fix memory leaks
There are still some leaks from wayland-cursor stuff, but there is no way to free the memory as user of the cursor library.
This commit is contained in:
parent
0b1ba0bf64
commit
4b10255008
@ -188,11 +188,12 @@ static void releaseGlContext_wayland(MPGLContext *ctx)
|
||||
struct vo_wayland_state *wl = ctx->vo->wayland;
|
||||
|
||||
gl->Finish();
|
||||
eglReleaseThread();
|
||||
wl_egl_window_destroy(wl->egl_context.egl_window);
|
||||
eglDestroySurface(wl->egl_context.egl.dpy, wl->egl_context.egl_surface);
|
||||
eglMakeCurrent(wl->egl_context.egl.dpy, NULL, NULL, EGL_NO_CONTEXT);
|
||||
eglDestroyContext(wl->egl_context.egl.dpy, wl->egl_context.egl.ctx);
|
||||
eglTerminate(wl->egl_context.egl.dpy);
|
||||
eglReleaseThread();
|
||||
wl_egl_window_destroy(wl->egl_context.egl_window);
|
||||
wl->egl_context.egl.ctx = NULL;
|
||||
}
|
||||
|
||||
|
@ -651,6 +651,9 @@ static void uninit(struct vo *vo)
|
||||
for (int i = 0; i < MAX_BUFFERS; ++i)
|
||||
destroy_shm_buffer(&p->buffers[i]);
|
||||
|
||||
if (p->redraw_callback)
|
||||
wl_callback_destroy(p->redraw_callback);
|
||||
|
||||
talloc_free(p->original_image);
|
||||
|
||||
vo_wayland_uninit(vo);
|
||||
|
@ -763,6 +763,20 @@ static bool create_display (struct vo_wayland_state *wl)
|
||||
|
||||
static void destroy_display (struct vo_wayland_state *wl)
|
||||
{
|
||||
struct vo_wayland_output *output;
|
||||
|
||||
wl_list_for_each(output, &wl->display.output_list, link) {
|
||||
if (output && output->output) {
|
||||
wl_output_destroy(output->output);
|
||||
output->output = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
wl_list_empty(&wl->display.output_list);
|
||||
|
||||
if (wl->display.shm)
|
||||
wl_shm_destroy(wl->display.shm);
|
||||
|
||||
if (wl->display.shell)
|
||||
wl_shell_destroy(wl->display.shell);
|
||||
|
||||
@ -771,6 +785,7 @@ static void destroy_display (struct vo_wayland_state *wl)
|
||||
|
||||
if (wl->display.registry)
|
||||
wl_registry_destroy(wl->display.registry);
|
||||
|
||||
if (wl->display.display) {
|
||||
wl_display_flush(wl->display.display);
|
||||
wl_display_disconnect(wl->display.display);
|
||||
@ -801,6 +816,7 @@ static void destroy_window (struct vo_wayland_state *wl)
|
||||
{
|
||||
if (wl->window.shell_surface)
|
||||
wl_shell_surface_destroy(wl->window.shell_surface);
|
||||
|
||||
if (wl->window.surface)
|
||||
wl_surface_destroy(wl->window.surface);
|
||||
}
|
||||
@ -854,6 +870,7 @@ static void destroy_input (struct vo_wayland_state *wl)
|
||||
xkb_map_unref(wl->input.xkb.keymap);
|
||||
xkb_state_unref(wl->input.xkb.state);
|
||||
}
|
||||
|
||||
if (wl->input.xkb.context)
|
||||
xkb_context_unref(wl->input.xkb.context);
|
||||
|
||||
@ -1020,6 +1037,7 @@ static int vo_wayland_check_events (struct vo *vo)
|
||||
struct bstr file_list = bstr0(buffer);
|
||||
mp_event_drop_mime_data(vo->input_ctx, "text/uri-list",
|
||||
file_list);
|
||||
free(buffer);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user