diff --git a/src/wayland/surface_interface.cpp b/src/wayland/surface_interface.cpp index af3f857eb3..b0913a5ebc 100644 --- a/src/wayland/surface_interface.cpp +++ b/src/wayland/surface_interface.cpp @@ -54,15 +54,22 @@ SurfaceInterfacePrivate::SurfaceInterfacePrivate(SurfaceInterface *q) SurfaceInterfacePrivate::~SurfaceInterfacePrivate() { - for (KWaylandFrameCallback *frameCallback : current.frameCallbacks) { + // Need a copy to avoid hitting invalidated iterators in the for loop. + const QList currentFrameCallbacks = current.frameCallbacks; + for (KWaylandFrameCallback *frameCallback : currentFrameCallbacks) { frameCallback->destroy(); } - for (KWaylandFrameCallback *frameCallback : pending.frameCallbacks) { + + const QList pendingFrameCallbacks = pending.frameCallbacks; + for (KWaylandFrameCallback *frameCallback : pendingFrameCallbacks) { frameCallback->destroy(); } - for (KWaylandFrameCallback *frameCallback : cached.frameCallbacks) { + + const QList cachedFrameCallbacks = cached.frameCallbacks; + for (KWaylandFrameCallback *frameCallback : cachedFrameCallbacks) { frameCallback->destroy(); } + if (current.buffer) { current.buffer->unref(); }