loader/dri3: Destroy Present event context when destroying drawable v2

Without this, the X server may accumulate stale Present event contexts
if a client ends up creating and destroying DRI drawables for the same
window.

v2: Based on Chris Wilson's review:
* Use xcb_present_select_input_checked so that protocol errors
  generated by old X servers can be handled gracefully
* Use xcb_discard_reply() instead of free(xcb_request_check())
This commit is contained in:
Michel Dänzer 2016-07-28 17:44:49 +09:00 committed by Michel Dänzer
parent 1743c4184b
commit 5d191bafa2

View file

@ -118,8 +118,14 @@ loader_dri3_drawable_fini(struct loader_dri3_drawable *draw)
dri3_free_render_buffer(draw, draw->buffers[i]);
}
if (draw->special_event)
if (draw->special_event) {
xcb_void_cookie_t cookie =
xcb_present_select_input_checked(draw->conn, draw->eid, draw->drawable,
XCB_PRESENT_EVENT_MASK_NO_EVENT);
xcb_discard_reply(draw->conn, cookie.sequence);
xcb_unregister_for_special_event(draw->conn, draw->special_event);
}
}
int