summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichel Dänzer <mdaenzer@redhat.com>2020-06-25 18:11:31 +0200
committerOlivier Fourdan <fourdan@gmail.com>2020-07-20 13:22:20 +0000
commitba52e5eb0e3b30aa63a8b51e8899eca88d9e0a30 (patch)
tree7ea25192f1be47f3bc8367a915cc0aac2e2ed42b
parentb3310ed5036b098509e40b3642c2265132445e6a (diff)
present/wnmd: Free flip_queue entries in present_wnmd_clear_window_flip
When present_wnmd_clear_window_flip is done, present_destroy_window frees struct present_window_priv, and the events in the flip queue become unreachable. So if we don't free them first, they're leaked. Also drop the call to present_wnmd_set_abort_flip, which just sets a flag in struct present_window_priv and thus can't have any observable effect after present_destroy_window. Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1042 Reviewed-by: Dave Airlie <airlied@redhat.com> (cherry picked from commit 1bdedc8dbb9d035b85444c2558a137470ff52113)
-rw-r--r--present/present_screen.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/present/present_screen.c b/present/present_screen.c
index c435f55f4..bfd30b8ba 100644
--- a/present/present_screen.c
+++ b/present/present_screen.c
@@ -115,9 +115,9 @@ present_wnmd_clear_window_flip(WindowPtr window)
present_window_priv_ptr window_priv = present_window_priv(window);
present_vblank_ptr vblank, tmp;
- if (window_priv->flip_pending) {
- present_wnmd_set_abort_flip(window);
- window_priv->flip_pending->window = NULL;
+ xorg_list_for_each_entry_safe(vblank, tmp, &window_priv->flip_queue, event_queue) {
+ present_pixmap_idle(vblank->pixmap, vblank->window, vblank->serial, vblank->idle_fence);
+ present_vblank_destroy(vblank);
}
xorg_list_for_each_entry_safe(vblank, tmp, &window_priv->idle_queue, event_queue) {