mirror of
https://github.com/mpv-player/mpv
synced 2025-04-09 11:11:52 +00:00
wayland_common: free DND resources on shutdown and error
This leaked only in edge cases, if at all.
This commit is contained in:
parent
15c48f3dc1
commit
f36ab2c609
@ -1549,6 +1549,15 @@ static const struct wl_registry_listener registry_listener = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* Static functions */
|
/* Static functions */
|
||||||
|
static void free_dnd_data(struct vo_wayland_state *wl)
|
||||||
|
{
|
||||||
|
// caller should close wl->dnd_fd if appropriate
|
||||||
|
|
||||||
|
wl->dnd_action = -1;
|
||||||
|
TA_FREEP(&wl->dnd_mime_type);
|
||||||
|
wl->dnd_mime_score = 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void check_dnd_fd(struct vo_wayland_state *wl)
|
static void check_dnd_fd(struct vo_wayland_state *wl)
|
||||||
{
|
{
|
||||||
if (wl->dnd_fd == -1)
|
if (wl->dnd_fd == -1)
|
||||||
@ -1573,21 +1582,18 @@ static void check_dnd_fd(struct vo_wayland_state *wl)
|
|||||||
|
|
||||||
MP_VERBOSE(wl, "Read %zu bytes from the DND fd\n", file_list.len);
|
MP_VERBOSE(wl, "Read %zu bytes from the DND fd\n", file_list.len);
|
||||||
|
|
||||||
mp_event_drop_mime_data(wl->vo->input_ctx, wl->dnd_mime_type,
|
if (wl->dnd_offer)
|
||||||
file_list, wl->dnd_action);
|
|
||||||
talloc_free(file_list.start);
|
|
||||||
if (wl->dnd_mime_type)
|
|
||||||
talloc_free(wl->dnd_mime_type);
|
|
||||||
|
|
||||||
if (wl->dnd_action >= 0 && wl->dnd_offer)
|
|
||||||
wl_data_offer_finish(wl->dnd_offer);
|
wl_data_offer_finish(wl->dnd_offer);
|
||||||
|
|
||||||
wl->dnd_action = -1;
|
mp_event_drop_mime_data(wl->vo->input_ctx, wl->dnd_mime_type,
|
||||||
wl->dnd_mime_type = NULL;
|
file_list, wl->dnd_action);
|
||||||
wl->dnd_mime_score = 0;
|
|
||||||
|
talloc_free(file_list.start);
|
||||||
|
free_dnd_data(wl);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fdp.revents & (POLLIN | POLLERR | POLLHUP)) {
|
if (fdp.revents & (POLLIN | POLLERR | POLLHUP)) {
|
||||||
|
free_dnd_data(wl);
|
||||||
close(wl->dnd_fd);
|
close(wl->dnd_fd);
|
||||||
wl->dnd_fd = -1;
|
wl->dnd_fd = -1;
|
||||||
}
|
}
|
||||||
@ -2593,6 +2599,10 @@ void vo_wayland_uninit(struct vo *vo)
|
|||||||
if (!wl)
|
if (!wl)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (wl->dnd_fd != -1)
|
||||||
|
close(wl->dnd_fd);
|
||||||
|
free_dnd_data(wl);
|
||||||
|
|
||||||
mp_input_put_key(wl->vo->input_ctx, MP_INPUT_RELEASE_ALL);
|
mp_input_put_key(wl->vo->input_ctx, MP_INPUT_RELEASE_ALL);
|
||||||
|
|
||||||
if (wl->compositor)
|
if (wl->compositor)
|
||||||
|
Loading…
Reference in New Issue
Block a user