diff --git a/src/video/wayland/SDL_waylandvideo.c b/src/video/wayland/SDL_waylandvideo.c index f9109f1d9..6d6d951d4 100644 --- a/src/video/wayland/SDL_waylandvideo.c +++ b/src/video/wayland/SDL_waylandvideo.c @@ -302,8 +302,17 @@ display_handle_geometry(void *data, { SDL_WaylandOutputData *driverdata = data; + SDL_VideoDisplay *display; + int i; if (driverdata->done) { + /* Clear the wl_output ref so Reset doesn't free it */ + display = SDL_GetDisplay(driverdata->index); + for (i = 0; i < display->num_display_modes; i += 1) { + display->display_modes[i].driverdata = NULL; + } + + /* Okay, now it's safe to reset */ SDL_ResetDisplayModes(driverdata->index); /* The display has officially started over. */