Delete resources in XdgOutput teardown
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. The zxdg_output_v1::destroy_func will then be called to delete the Resource object.
This commit is contained in:
parent
9b4e2dbdf8
commit
bef0f305cf
1 changed files with 13 additions and 1 deletions
|
@ -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<struct ::wl_client*, QtWaylandServer::zxdg_output_v1::Resource*> resourceMap = d->resourceMap();
|
||||
for (auto resource : resourceMap)
|
||||
{
|
||||
wl_resource_destroy(resource->handle);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void XdgOutputV1Interface::setLogicalSize(const QSize &size)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue