Skip to content

Commit 362ad33

Browse files
committed
fixed thread safe inject
1 parent 78a2cce commit 362ad33

1 file changed

Lines changed: 8 additions & 1 deletion

File tree

  • framework/global/thirdparty/kors_modularity/modularity

framework/global/thirdparty/kors_modularity/modularity/modulesioc.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ SOFTWARE.
3030
#include <cassert>
3131
#include <iostream>
3232
#include <functional>
33+
#include <mutex>
3334

3435
#include "imoduleinterface.h"
3536

@@ -138,6 +139,7 @@ class ModulesIoCBase
138139

139140
void reset()
140141
{
142+
std::lock_guard<std::mutex> lock(m_mutex);
141143
for (auto& s : m_map) {
142144
Service& inj = s.second;
143145
inj.p = nullptr;
@@ -155,6 +157,7 @@ class ModulesIoCBase
155157

156158
void unregisterService(const InterfaceInfo& info)
157159
{
160+
std::lock_guard<std::mutex> lock(m_mutex);
158161
auto it = m_map.find(info.id);
159162
if (it == m_map.end()) {
160163
return;
@@ -177,6 +180,7 @@ class ModulesIoCBase
177180
return;
178181
}
179182

183+
std::lock_guard<std::mutex> lock(m_mutex);
180184
auto foundIt = m_map.find(info.id);
181185
if (foundIt != m_map.end()) {
182186
Service& inj = foundIt->second;
@@ -203,7 +207,7 @@ class ModulesIoCBase
203207
const InterfaceInfo& info)
204208
{
205209
//! TODO add statistics collection / monitoring, who resolves what
206-
210+
std::lock_guard<std::mutex> lock(m_mutex);
207211
auto it = m_map.find(info.id);
208212
if (it == m_map.end()) {
209213
return nullptr;
@@ -215,6 +219,7 @@ class ModulesIoCBase
215219
using OnChangedInternal = std::function<void (const std::shared_ptr<IModuleInterface>&)>;
216220
int doSubscribe(const InterfaceInfo& info, const OnChangedInternal& onChanged)
217221
{
222+
std::lock_guard<std::mutex> lock(m_mutex);
218223
auto it = m_map.find(info.id);
219224
if (it == m_map.end()) {
220225
return -1;
@@ -229,6 +234,7 @@ class ModulesIoCBase
229234

230235
void doUnsubscribe(const InterfaceInfo& info, int key)
231236
{
237+
std::lock_guard<std::mutex> lock(m_mutex);
232238
auto it = m_map.find(info.id);
233239
if (it == m_map.end()) {
234240
return;
@@ -266,6 +272,7 @@ class ModulesIoCBase
266272
};
267273
}
268274

275+
std::mutex m_mutex;
269276
std::map<std::string_view, Service > m_map;
270277
std::shared_ptr<bool> m_alive = std::make_shared<bool>(true);
271278
};

0 commit comments

Comments
 (0)