diff --git a/src/wayland/xdgoutput_v1_interface.cpp b/src/wayland/xdgoutput_v1_interface.cpp index 1e2f9ae69c..0eee238b92 100644 --- a/src/wayland/xdgoutput_v1_interface.cpp +++ b/src/wayland/xdgoutput_v1_interface.cpp @@ -107,7 +107,19 @@ XdgOutputV1Interface::XdgOutputV1Interface(QObject *parent) } XdgOutputV1Interface::~XdgOutputV1Interface() -{} +{ + // Generated code typically cleans up resource objects when the client calls the relevant destructor + // In multi-cast mode our wrapper can be deleted at any time whilst a client resource exists. + // any existing resources that have a pending message will then crash the compositor. + + // Deleting resources ahead of time also resolves this. calls to this resource will no-op + const QMultiMap resourceMap = d->resourceMap(); + for (auto resource : resourceMap) + { + wl_resource_destroy(resource->handle); + } + +} void XdgOutputV1Interface::setLogicalSize(const QSize &size) {