diff --git a/src/sna/sna_dri2.c b/src/sna/sna_dri2.c index 20995d5c..6f1931f1 100644 --- a/src/sna/sna_dri2.c +++ b/src/sna/sna_dri2.c @@ -935,6 +935,24 @@ to_frame_event(uintptr_t data) return (struct sna_dri2_frame_event *)(data & ~1); } +struct window_crtc { + xf86CrtcPtr crtc; + int64_t msc_delta; +}; + +static struct window_crtc *window_get_crtc(WindowPtr win) +{ + return ((void **)__get_private(win, sna_window_key))[3]; +} + +static void window_set_crtc(WindowPtr win, struct window_crtc *wc) +{ + assert(win->drawable.type == DRAWABLE_WINDOW); + assert(window_get_crtc(win) == NULL); + ((void **)__get_private(win, sna_window_key))[3] = wc; + assert(window_get_crtc(win) == wc); +} + static xf86CrtcPtr sna_dri2_get_crtc(DrawablePtr draw) { @@ -1061,6 +1079,8 @@ void sna_dri2_destroy_window(WindowPtr win) struct sna *sna = to_sna_from_drawable(&win->drawable); struct sna_dri2_frame_event *info, *chain; + free(window_get_crtc(win)); + info = sna_dri2_window_get_chain(win); if (info == NULL) return; @@ -1855,24 +1875,6 @@ sna_dri2_page_flip_handler(struct sna *sna, sna_dri2_flip_event(sna, info); } -struct window_crtc { - xf86CrtcPtr crtc; - int64_t msc_delta; -}; - -static struct window_crtc *window_get_crtc(WindowPtr win) -{ - return ((void **)__get_private(win, sna_window_key))[3]; -} - -static void window_set_crtc(WindowPtr win, struct window_crtc *wc) -{ - assert(win->drawable.type == DRAWABLE_WINDOW); - assert(window_get_crtc(win) == NULL); - ((void **)__get_private(win, sna_window_key))[3] = wc; - assert(window_get_crtc(win) == wc); -} - static uint64_t draw_current_msc(DrawablePtr draw, xf86CrtcPtr crtc, uint64_t msc) {