From acd09c21f7e3f261b584eaf9136966439eaf3a8b Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Sun, 18 Sep 2011 22:04:09 +0200 Subject: [directfb] Use QScopedPointer to manage heap allocated objects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use QScopedPointer to avoid trying to manually delete objects. For some of the cases the leak would only be viewable when things are getting shut down. Leave in some more warnings for cleaning it up, e.g. the m_eventBuffer of the Input is leaked and the input task will only stop after another key event. Change-Id: Ic54568343605b4ab7094a7dece40e22250184a37 Reviewed-by: Jørgen Lind --- .../platforms/directfb/qdirectfbbackingstore.cpp | 9 ++------- .../platforms/directfb/qdirectfbbackingstore.h | 4 +--- src/plugins/platforms/directfb/qdirectfbcursor.cpp | 4 +--- src/plugins/platforms/directfb/qdirectfbcursor.h | 2 +- src/plugins/platforms/directfb/qdirectfbinput.h | 2 +- .../platforms/directfb/qdirectfbintegration.cpp | 21 +++++++-------------- .../platforms/directfb/qdirectfbintegration.h | 7 +++---- 7 files changed, 16 insertions(+), 33 deletions(-) diff --git a/src/plugins/platforms/directfb/qdirectfbbackingstore.cpp b/src/plugins/platforms/directfb/qdirectfbbackingstore.cpp index b45de1b25e..b20c9f0d0d 100644 --- a/src/plugins/platforms/directfb/qdirectfbbackingstore.cpp +++ b/src/plugins/platforms/directfb/qdirectfbbackingstore.cpp @@ -65,17 +65,12 @@ QDirectFbBackingStore::QDirectFbBackingStore(QWindow *window) QDirectFbBlitter *blitter = new QDirectFbBlitter(window->size(), m_dfbSurface); m_pmdata = new QDirectFbBlitterPlatformPixmap; m_pmdata->setBlittable(blitter); - m_pixmap = new QPixmap(m_pmdata); -} - -QDirectFbBackingStore::~QDirectFbBackingStore() -{ - delete m_pixmap; + m_pixmap.reset(new QPixmap(m_pmdata)); } QPaintDevice *QDirectFbBackingStore::paintDevice() { - return m_pixmap; + return m_pixmap.data(); } void QDirectFbBackingStore::flush(QWindow *, const QRegion ®ion, const QPoint &offset) diff --git a/src/plugins/platforms/directfb/qdirectfbbackingstore.h b/src/plugins/platforms/directfb/qdirectfbbackingstore.h index aed78b6f93..677d8281ba 100644 --- a/src/plugins/platforms/directfb/qdirectfbbackingstore.h +++ b/src/plugins/platforms/directfb/qdirectfbbackingstore.h @@ -53,7 +53,6 @@ class QDirectFbBackingStore : public QPlatformBackingStore { public: QDirectFbBackingStore(QWindow *window); - ~QDirectFbBackingStore(); QPaintDevice *paintDevice(); void flush(QWindow *window, const QRegion ®ion, const QPoint &offset); @@ -66,9 +65,8 @@ public: private: void lockSurfaceToImage(); - QPixmap *m_pixmap; + QScopedPointer m_pixmap; QBlittablePlatformPixmap *m_pmdata; - IDirectFBSurface *m_dfbSurface; }; diff --git a/src/plugins/platforms/directfb/qdirectfbcursor.cpp b/src/plugins/platforms/directfb/qdirectfbcursor.cpp index b39a3f3c0a..869dc3f97d 100644 --- a/src/plugins/platforms/directfb/qdirectfbcursor.cpp +++ b/src/plugins/platforms/directfb/qdirectfbcursor.cpp @@ -47,11 +47,9 @@ QDirectFBCursor::QDirectFBCursor(QPlatformScreen *screen) : QPlatformCursor(screen) { QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),DLID_PRIMARY, &m_layer); - m_image = new QPlatformCursorImage(0, 0, 0, 0, 0, 0); + m_image.reset(new QPlatformCursorImage(0, 0, 0, 0, 0, 0)); } -#warning "Memory leak?" - void QDirectFBCursor::changeCursor(QCursor *cursor, QWindow *) { int xSpot; diff --git a/src/plugins/platforms/directfb/qdirectfbcursor.h b/src/plugins/platforms/directfb/qdirectfbcursor.h index 22328da402..6c02c7ead8 100644 --- a/src/plugins/platforms/directfb/qdirectfbcursor.h +++ b/src/plugins/platforms/directfb/qdirectfbcursor.h @@ -55,7 +55,7 @@ public: private: IDirectFBDisplayLayer *m_layer; - QPlatformCursorImage *m_image; + QScopedPointer m_image; }; #endif // QDIRECTFBCURSOR_H diff --git a/src/plugins/platforms/directfb/qdirectfbinput.h b/src/plugins/platforms/directfb/qdirectfbinput.h index b0fe0c79eb..29300698c3 100644 --- a/src/plugins/platforms/directfb/qdirectfbinput.h +++ b/src/plugins/platforms/directfb/qdirectfbinput.h @@ -75,7 +75,7 @@ private: IDirectFB *m_dfbInterface; IDirectFBDisplayLayer *m_dfbDisplayLayer; - IDirectFBEventBuffer *m_eventBuffer; + IDirectFBEventBuffer *m_eventBuffer; // XXX: TODO: FIXME: leaked!!! (but it is a singleton) bool m_shouldStop; QSemaphore m_waitStop; diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.cpp b/src/plugins/platforms/directfb/qdirectfbintegration.cpp index efa71ce361..96ba391a38 100644 --- a/src/plugins/platforms/directfb/qdirectfbintegration.cpp +++ b/src/plugins/platforms/directfb/qdirectfbintegration.cpp @@ -75,12 +75,7 @@ QDirectFbScreen::QDirectFbScreen(int display) m_depth = QDirectFbConvenience::colorDepthForSurface(config.pixelformat); m_physicalSize = QSizeF(config.width, config.height) * inch / dpi; - m_cursor = new QDirectFBCursor(this); -} - -QDirectFbScreen::~QDirectFbScreen() -{ -#warning "Delete the cursor?" + m_cursor.reset(new QDirectFBCursor(this)); } QDirectFbIntegration::QDirectFbIntegration() @@ -111,18 +106,17 @@ QDirectFbIntegration::QDirectFbIntegration() QDirectFbScreen *primaryScreen = new QDirectFbScreen(0); screenAdded(primaryScreen); - m_inputRunner = new QThread; - m_input = new QDirectFbInput(0); - m_input->moveToThread(m_inputRunner); - QObject::connect(m_inputRunner,SIGNAL(started()),m_input,SLOT(runInputEventLoop())); + m_inputRunner.reset(new QThread); + m_input.reset(new QDirectFbInput(0)); + m_input->moveToThread(m_inputRunner.data()); + QObject::connect(m_inputRunner.data(), SIGNAL(started()), + m_input.data(), SLOT(runInputEventLoop())); m_inputRunner->start(); } QDirectFbIntegration::~QDirectFbIntegration() { m_input->stopInputEventLoop(); - delete m_inputRunner; - delete m_input; } QPlatformPixmap *QDirectFbIntegration::createPlatformPixmap(QPlatformPixmap::PixelType type) const @@ -135,8 +129,7 @@ QPlatformPixmap *QDirectFbIntegration::createPlatformPixmap(QPlatformPixmap::Pix QPlatformWindow *QDirectFbIntegration::createPlatformWindow(QWindow *window) const { - QDirectFbInput *input = const_cast(m_input);//gah - return new QDirectFbWindow(window,input); + return new QDirectFbWindow(window,m_input.data()); } QAbstractEventDispatcher *QDirectFbIntegration::guiThreadEventDispatcher() const diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.h b/src/plugins/platforms/directfb/qdirectfbintegration.h index cba32497b3..f44febeadf 100644 --- a/src/plugins/platforms/directfb/qdirectfbintegration.h +++ b/src/plugins/platforms/directfb/qdirectfbintegration.h @@ -58,7 +58,6 @@ class QDirectFbScreen : public QPlatformScreen { public: QDirectFbScreen(int display); - ~QDirectFbScreen(); QRect geometry() const { return m_geometry; } int depth() const { return m_depth; } @@ -74,7 +73,7 @@ public: IDirectFBDisplayLayer *m_layer; private: - QDirectFBCursor *m_cursor; + QScopedPointer m_cursor; }; class QDirectFbIntegration : public QPlatformIntegration @@ -91,8 +90,8 @@ public: QPlatformFontDatabase *fontDatabase() const; private: - QDirectFbInput *m_input; - QThread *m_inputRunner; + QScopedPointer m_input; + QScopedPointer m_inputRunner; QPlatformFontDatabase *m_fontDb; QAbstractEventDispatcher *m_eventDispatcher; }; -- cgit v1.2.3