summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGiulio Camuffo <giulio.camuffo@jollamobile.com>2014-12-11 11:46:14 +0200
committerGiulio Camuffo <giulio.camuffo@jollamobile.com>2014-12-11 16:29:55 +0100
commit48091975969fa5a7c436f4f51a96f26f6297af6e (patch)
tree2c7d7fb44aad1381215db26ae17549a404e94ebb /src
parent26ec3626f1088c272e3232f0341781bb38f518f3 (diff)
Fix dangling pointer access when getting dnd data in some cases
Calling wl_data_source.destroy(); wl_data_offer.receive(), where the wl_data_offer is referring to the destroyed wl_data_source, was crashing the compositor. Change-Id: Iab352d63f8a93aebd0bfbcf1dc26c0e8a48a523a Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r--src/compositor/wayland_wrapper/qwldataoffer_p.h3
-rw-r--r--src/compositor/wayland_wrapper/qwldatasource_p.h4
2 files changed, 4 insertions, 3 deletions
diff --git a/src/compositor/wayland_wrapper/qwldataoffer_p.h b/src/compositor/wayland_wrapper/qwldataoffer_p.h
index 5911819d8..643322f32 100644
--- a/src/compositor/wayland_wrapper/qwldataoffer_p.h
+++ b/src/compositor/wayland_wrapper/qwldataoffer_p.h
@@ -41,6 +41,7 @@
#ifndef WLDATAOFFER_H
#define WLDATAOFFER_H
+#include <QPointer>
#include <QtCompositor/private/qwayland-server-wayland.h>
QT_BEGIN_NAMESPACE
@@ -63,7 +64,7 @@ protected:
void data_offer_destroy_resource(Resource *resource) Q_DECL_OVERRIDE;
private:
- DataSource *m_dataSource;
+ QPointer<DataSource> m_dataSource;
};
}
diff --git a/src/compositor/wayland_wrapper/qwldatasource_p.h b/src/compositor/wayland_wrapper/qwldatasource_p.h
index 01ac4cbd9..013f4b54f 100644
--- a/src/compositor/wayland_wrapper/qwldatasource_p.h
+++ b/src/compositor/wayland_wrapper/qwldatasource_p.h
@@ -42,7 +42,7 @@
#define WLDATASOURCE_H
#include <QtCompositor/private/qwayland-server-wayland.h>
-
+#include <QObject>
#include <QtCore/QList>
QT_BEGIN_NAMESPACE
@@ -53,7 +53,7 @@ class DataOffer;
class DataDevice;
class DataDeviceManager;
-class DataSource : public QtWaylandServer::wl_data_source
+class DataSource : public QObject, public QtWaylandServer::wl_data_source
{
public:
DataSource(struct wl_client *client, uint32_t id, uint32_t time);