mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 07:08:04 +02:00
wayland: Don't cancel a roundtrip when any event is received
Since wl_display_dispatch_queue() returns the number of processed events or -1 on error, only cancel the roundtrip if an -1 is returned. This also fixes a potential memory corruption bug happening when the roundtrip does an early return and the callback later writes to the then out of scope stack allocated `done' parameter. Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>
This commit is contained in:
parent
f9d8d0c3b5
commit
f2da7e720f
2 changed files with 7 additions and 1 deletions
|
|
@ -70,6 +70,9 @@ roundtrip(struct dri2_egl_display *dri2_dpy)
|
|||
while (ret != -1 && !done)
|
||||
ret = wl_display_dispatch_queue(dri2_dpy->wl_dpy, dri2_dpy->wl_queue);
|
||||
|
||||
if (!done)
|
||||
wl_callback_destroy(callback);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -57,9 +57,12 @@ wayland_roundtrip(struct wayland_display *display)
|
|||
callback = wl_display_sync(display->dpy);
|
||||
wl_callback_add_listener(callback, &sync_listener, &done);
|
||||
wl_proxy_set_queue((struct wl_proxy *) callback, display->queue);
|
||||
while (ret == 0 && !done)
|
||||
while (ret != -1 && !done)
|
||||
ret = wl_display_dispatch_queue(display->dpy, display->queue);
|
||||
|
||||
if (!done)
|
||||
wl_callback_destroy(callback);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue