mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 02:58:05 +02:00
Revert "wayland-drm: constify the callbacks struct"
The wayland-drm callback struct is referenced, rather than duplicated, inside wayland-drm. Constifying this struct involved moving it on to the stack; as a result, starting any EGL client on Wayland called into random stack memory, and killed the compositor. This reverts commit1d0be5b3feand39d539e321. Signed-off-by: Daniel Stone <daniels@collabora.com> Cc: Emil Velikov <emil.velikov@collabora.com> Cc: Krzysztof Sobiecki <sobkas@gmail.com> Fixes:1d0be5b3fe("wayland-drm: constify the callbacks struct")
This commit is contained in:
parent
8822ea100c
commit
5b7e651364
3 changed files with 12 additions and 8 deletions
|
|
@ -2718,16 +2718,17 @@ dri2_wl_release_buffer(void *user_data, struct wl_drm_buffer *buffer)
|
|||
dri2_dpy->image->destroyImage(buffer->driver_buffer);
|
||||
}
|
||||
|
||||
static struct wayland_drm_callbacks wl_drm_callbacks = {
|
||||
.authenticate = NULL,
|
||||
.reference_buffer = dri2_wl_reference_buffer,
|
||||
.release_buffer = dri2_wl_release_buffer
|
||||
};
|
||||
|
||||
static EGLBoolean
|
||||
dri2_bind_wayland_display_wl(_EGLDriver *drv, _EGLDisplay *disp,
|
||||
struct wl_display *wl_dpy)
|
||||
{
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
const struct wayland_drm_callbacks wl_drm_callbacks = {
|
||||
.authenticate = (int(*)(void *, uint32_t)) dri2_dpy->vtbl->authenticate,
|
||||
.reference_buffer = dri2_wl_reference_buffer,
|
||||
.release_buffer = dri2_wl_release_buffer
|
||||
};
|
||||
int flags = 0;
|
||||
uint64_t cap;
|
||||
|
||||
|
|
@ -2736,6 +2737,9 @@ dri2_bind_wayland_display_wl(_EGLDriver *drv, _EGLDisplay *disp,
|
|||
if (dri2_dpy->wl_server_drm)
|
||||
return EGL_FALSE;
|
||||
|
||||
wl_drm_callbacks.authenticate =
|
||||
(int(*)(void *, uint32_t)) dri2_dpy->vtbl->authenticate;
|
||||
|
||||
if (drmGetCap(dri2_dpy->fd, DRM_CAP_PRIME, &cap) == 0 &&
|
||||
cap == (DRM_PRIME_CAP_IMPORT | DRM_PRIME_CAP_EXPORT) &&
|
||||
dri2_dpy->image->base.version >= 7 &&
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ struct wl_drm {
|
|||
char *device_name;
|
||||
uint32_t flags;
|
||||
|
||||
const struct wayland_drm_callbacks *callbacks;
|
||||
struct wayland_drm_callbacks *callbacks;
|
||||
|
||||
struct wl_buffer_interface buffer_interface;
|
||||
};
|
||||
|
|
@ -259,7 +259,7 @@ wayland_drm_buffer_get(struct wl_drm *drm, struct wl_resource *resource)
|
|||
|
||||
struct wl_drm *
|
||||
wayland_drm_init(struct wl_display *display, char *device_name,
|
||||
const struct wayland_drm_callbacks *callbacks, void *user_data,
|
||||
struct wayland_drm_callbacks *callbacks, void *user_data,
|
||||
uint32_t flags)
|
||||
{
|
||||
struct wl_drm *drm;
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ wayland_drm_buffer_get(struct wl_drm *drm, struct wl_resource *resource);
|
|||
|
||||
struct wl_drm *
|
||||
wayland_drm_init(struct wl_display *display, char *device_name,
|
||||
const struct wayland_drm_callbacks *callbacks, void *user_data,
|
||||
struct wayland_drm_callbacks *callbacks, void *user_data,
|
||||
uint32_t flags);
|
||||
|
||||
void
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue