From e07a94d7ac67994ecf3da26ad9509d97b80cd238 Mon Sep 17 00:00:00 2001 From: Johan Klokkhammer Helsing Date: Fri, 5 Apr 2019 09:44:40 +0200 Subject: Compositor: Don't destroy wl_display from platform integration If the platform integration provides the wl_display, it should be the platform integration's responsibility to destroy it as well. Task-number: QTBUG-74879 Change-Id: I18999a5bd8cdc2900cac86f156f2adaaebf86158 Reviewed-by: Laszlo Agocs --- src/compositor/compositor_api/qwaylandcompositor.cpp | 9 +++++++-- src/compositor/compositor_api/qwaylandcompositor_p.h | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/compositor/compositor_api/qwaylandcompositor.cpp b/src/compositor/compositor_api/qwaylandcompositor.cpp index 053235432..e95e9a72e 100644 --- a/src/compositor/compositor_api/qwaylandcompositor.cpp +++ b/src/compositor/compositor_api/qwaylandcompositor.cpp @@ -162,8 +162,12 @@ QWaylandCompositorPrivate::QWaylandCompositorPrivate(QWaylandCompositor *composi { if (QGuiApplication::platformNativeInterface()) display = static_cast(QGuiApplication::platformNativeInterface()->nativeResourceForIntegration("server_wl_display")); - if (!display) + + if (!display) { display = wl_display_create(); + ownsDisplay = true; + } + eventHandler.reset(new QtWayland::WindowSystemEventHandler(compositor)); timer.start(); @@ -246,7 +250,8 @@ QWaylandCompositorPrivate::~QWaylandCompositorPrivate() // Some client buffer integrations need to clean up before the destroying the wl_display client_buffer_integration.reset(); - wl_display_destroy(display); + if (ownsDisplay) + wl_display_destroy(display); } void QWaylandCompositorPrivate::preInit() diff --git a/src/compositor/compositor_api/qwaylandcompositor_p.h b/src/compositor/compositor_api/qwaylandcompositor_p.h index cdf4be6b4..d91977def 100644 --- a/src/compositor/compositor_api/qwaylandcompositor_p.h +++ b/src/compositor/compositor_api/qwaylandcompositor_p.h @@ -137,6 +137,7 @@ protected: QList externally_added_socket_fds; #endif struct wl_display *display = nullptr; + bool ownsDisplay = false; QList seats; QList outputs; -- cgit v1.2.3