@@ -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