[PATCH] MarbleDebug: don't use a class extending QIODevice as a null device

Lubomir I. Ivanov neolit123 at gmail.com
Sun Apr 9 13:15:17 PDT 2017


From: "Lubomir I. Ivanov" <neolit123 at gmail.com>

For some reason on Windows 10 the NullDevice class approach
causes an infinite loop because QtCore cannot obtain a mutex lock
(ntdll.dll!_NtWaitForSingleObject) for the text stream.

Using this method of passing the location of the system null device
to QFile, "should" work better.

Reported-by: Stefan Fuchs <sfuchs at gmx.de>
Signed-off-by: Lubomir I. Ivanov <neolit123 at gmail.com>
---

untested in marble for the reported use case!
i've tested it in a standalone "hello-world" type of project.

this is a patch for the MarbleDebug.cpp file in the Subsurface branch:
against 4325da9 [ssrf/Subsurface-branch]
---
 src/lib/marble/MarbleDebug.cpp | 28 +++++++---------------------
 1 file changed, 7 insertions(+), 21 deletions(-)

diff --git a/src/lib/marble/MarbleDebug.cpp b/src/lib/marble/MarbleDebug.cpp
index 8e237d9..615bfe1 100644
--- a/src/lib/marble/MarbleDebug.cpp
+++ b/src/lib/marble/MarbleDebug.cpp
@@ -10,37 +10,23 @@
 
 #include "MarbleDebug.h"
 
+#include <QFile>
+#include <QProcess>
+
 namespace Marble
 {
 bool MarbleDebug::m_enabled = false;
 
-class NullDevice : public QIODevice
-{
-public:
-    NullDevice()
-    {
-        open( QIODevice::WriteOnly );
-    }
-
-    qint64 readData( char * /*data*/, qint64 /*maxSize*/ )
-    {
-        return -1;
-    }
-
-    qint64 writeData( const char * /*data*/, qint64 maxSize )
-    {
-        return maxSize;
-    }
-};
-
 QDebug mDebug()
 {
     if ( MarbleDebug::isEnabled() ) {
         return QDebug( QtDebugMsg );
     }
     else {
-        static QIODevice *device = new NullDevice;
-        return QDebug( device );
+        static QFile *nullDevice = new QFile(QProcess::nullDevice());
+        if ( !nullDevice->isOpen() )
+             nullDevice->open(QIODevice::WriteOnly);
+         return QDebug( nullDevice );
     }
 }
 
-- 
1.7.11.msysgit.0



More information about the subsurface mailing list