From 3b64fc008f17d9a35120897f838874e821423bee Mon Sep 17 00:00:00 2001 From: Roland Knall Date: Fri, 5 Jan 2018 15:21:17 +0100 Subject: [PATCH] Qt: Fix windows version of Preference Dialog Initializing a static member on Windows C++ has to be done differently. This fixes the segfault introduced with Ia611ec192dcc1ad638a997182cec1ab5bdb7859c Change-Id: Ib7a9840feda74830f835345c666f57e23e9e4e0b Reviewed-on: https://code.wireshark.org/review/25163 Reviewed-by: Roland Knall Petri-Dish: Roland Knall Tested-by: Petri Dish Buildbot Reviewed-by: Michael Mann --- ui/qt/manager/preference_manager.cpp | 16 ++++++++++------ ui/qt/manager/preference_manager.h | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/ui/qt/manager/preference_manager.cpp b/ui/qt/manager/preference_manager.cpp index f979eb6c96..26e64e040c 100644 --- a/ui/qt/manager/preference_manager.cpp +++ b/ui/qt/manager/preference_manager.cpp @@ -16,7 +16,11 @@ PreferenceFactory::~PreferenceFactory() {} -QMap PreferenceManager::factories; +QMap & PreferenceManager::factories() +{ + static QMap inst = QMap(); + return inst; +} PreferenceManager::PreferenceManager(QObject * parent) : QObject(parent) @@ -25,7 +29,7 @@ PreferenceManager::PreferenceManager(QObject * parent) PreferenceManager::~PreferenceManager() { /* As this is a singleton, this is the point, where we can clear the registry */ - PreferenceManager::factories.clear(); + PreferenceManager::factories().clear(); } PreferenceManager * PreferenceManager::instance() @@ -41,10 +45,10 @@ void PreferenceManager::registerType(int pref, PreferenceFactory * factory) { Q_ASSERT(pref >= 0); - if ( PreferenceManager::factories.contains(pref) || ! factory ) + if ( PreferenceManager::factories().contains(pref) || ! factory ) return; - PreferenceManager::factories[pref] = factory; + PreferenceManager::factories()[pref] = factory; } WiresharkPreference * PreferenceManager::getPreference(PrefsItem * pref) @@ -53,11 +57,11 @@ WiresharkPreference * PreferenceManager::getPreference(PrefsItem * pref) return Q_NULLPTR; int key = pref->getPrefType(); - if ( ! PreferenceManager::factories.contains(key) ) + if ( ! PreferenceManager::factories().contains(key) ) return Q_NULLPTR; /* All actions are parented with this manager, to clear the objects together with the manager */ - WiresharkPreference * wspref = qobject_cast(PreferenceManager::factories[key]->create(this)); + WiresharkPreference * wspref = qobject_cast(PreferenceManager::factories()[key]->create(this)); if ( wspref ) wspref->setPrefsItem(pref); diff --git a/ui/qt/manager/preference_manager.h b/ui/qt/manager/preference_manager.h index 6ae224ee66..99dc16d0be 100644 --- a/ui/qt/manager/preference_manager.h +++ b/ui/qt/manager/preference_manager.h @@ -39,7 +39,7 @@ protected: explicit PreferenceManager(QObject * parent = Q_NULLPTR); private: - static QMap factories; + static QMap & factories(); }; class PreferenceFactory : public QObject