diff --git a/oscar/SleepLib/deviceconnection.cpp b/oscar/SleepLib/deviceconnection.cpp index 90f8933c..06da68bc 100644 --- a/oscar/SleepLib/deviceconnection.cpp +++ b/oscar/SleepLib/deviceconnection.cpp @@ -106,7 +106,7 @@ DeviceConnectionManager::DeviceConnectionManager() DeviceConnection* DeviceConnectionManager::openConnection(const QString & type, const QString & name) { - if (!s_factories.contains(type)) { + if (!factories().contains(type)) { qWarning() << "Unknown device connection type:" << type; return nullptr; } @@ -116,7 +116,7 @@ DeviceConnection* DeviceConnectionManager::openConnection(const QString & type, } // Recording/replay (if any) is handled by the connection. - DeviceConnection* conn = s_factories[type](name, m_record, m_replay); + DeviceConnection* conn = factories()[type](name, m_record, m_replay); if (conn) { if (conn->open()) { m_connections[name] = conn; @@ -156,15 +156,19 @@ SerialPortConnection* DeviceConnectionManager::openSerialPortConnection(const QS } -QHash DeviceConnectionManager::s_factories; +QHash & DeviceConnectionManager::factories() +{ + static QHash s_factories; + return s_factories; +} bool DeviceConnectionManager::registerClass(const QString & type, DeviceConnection::FactoryMethod factory) { - if (s_factories.contains(type)) { + if (factories().contains(type)) { qWarning() << "Connection class already registered for type" << type; return false; } - s_factories[type] = factory; + factories()[type] = factory; return true; } diff --git a/oscar/SleepLib/deviceconnection.h b/oscar/SleepLib/deviceconnection.h index b5b452ef..10f48cab 100644 --- a/oscar/SleepLib/deviceconnection.h +++ b/oscar/SleepLib/deviceconnection.h @@ -127,7 +127,7 @@ public: // DeviceConnection subclasses registration, not intended for client use. protected: - static QHash s_factories; + static QHash & factories(); public: static bool registerClass(const QString & type, DeviceConnection::FactoryMethod factory); static class DeviceConnection* createInstance(const QString & type);