Fix a crash with MSVC debug builds.
authorHannah von Reth <vonreth@kde.org>
Sat, 11 Jun 2016 15:30:08 +0000 (17:30 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Wed, 28 Feb 2018 22:11:03 +0000 (23:11 +0100)
When staticMetaObject.className() was called before qApp->exec(),
the application crashed. This happend only in debug builds.

Resolves GH-213.

(cherry picked from commit 991142d7dfd2e36f0b30089a223aafda3d9b4409)

src/common/syncableobject.h

index 1275cc3..af9dfdd 100644 (file)
 
 #include "signalproxy.h"
 
-#define SYNCABLE_OBJECT static const int _classNameOffset__;
-#define INIT_SYNCABLE_OBJECT(x) const int x ::_classNameOffset__ = QByteArray(staticMetaObject.className()).length() + 2;
+#define SYNCABLE_OBJECT static int _classNameOffset__();
+#define INIT_SYNCABLE_OBJECT(x) int x ::_classNameOffset__() {\
+    static int offset = QByteArray(x ::staticMetaObject.className()).length() + 2;\
+    return offset;\
+}\
 
 #ifdef Q_CC_MSVC
-#    define SYNC(...) sync_call__(SignalProxy::Server, (__FUNCTION__ + _classNameOffset__), __VA_ARGS__);
-#    define REQUEST(...) sync_call__(SignalProxy::Client, (__FUNCTION__ + _classNameOffset__), __VA_ARGS__);
+#    define SYNC(...) sync_call__(SignalProxy::Server, (__FUNCTION__ + _classNameOffset__()), __VA_ARGS__);
+#    define REQUEST(...) sync_call__(SignalProxy::Client, (__FUNCTION__ + _classNameOffset__()), __VA_ARGS__);
 #else
 #    define SYNC(...) sync_call__(SignalProxy::Server, __func__, __VA_ARGS__);
 #    define REQUEST(...) sync_call__(SignalProxy::Client, __func__, __VA_ARGS__);
@@ -48,7 +51,7 @@
 class SyncableObject : public QObject
 {
     SYNCABLE_OBJECT
-        Q_OBJECT
+    Q_OBJECT
 
 public:
     SyncableObject(QObject *parent = 0);