@@ -111,6 +111,10 @@ void NetworkEvents::_checkForEvent() {
111111 }
112112 log_v (" Network Event: %d - %s" , event->event_id , eventName (event->event_id ));
113113
114+ #if defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
115+ std::unique_lock<std::mutex> lock (_mtx);
116+ #endif // defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
117+
114118 // iterate over registered callbacks
115119 for (auto &i : _cbEventList){
116120 if (i.cb || i.fcb || i.scb ) {
@@ -130,6 +134,10 @@ void NetworkEvents::_checkForEvent() {
130134 }
131135 }
132136
137+ #if defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
138+ lock.unlock ();
139+ #endif // defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
140+
133141 // release the event object's memory
134142 delete event;
135143 }
@@ -151,6 +159,10 @@ network_event_handle_t NetworkEvents::onEvent(NetworkEventCb cbEvent, arduino_ev
151159 return 0 ;
152160 }
153161
162+ #if defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
163+ std::lock_guard<std::mutex> lock (_mtx);
164+ #endif // defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
165+
154166 _cbEventList.emplace_back (++_current_id, cbEvent, nullptr , nullptr , event);
155167 return _cbEventList.back ().id ;
156168}
@@ -160,6 +172,10 @@ network_event_handle_t NetworkEvents::onEvent(NetworkEventFuncCb cbEvent, arduin
160172 return 0 ;
161173 }
162174
175+ #if defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
176+ std::lock_guard<std::mutex> lock (_mtx);
177+ #endif // defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
178+
163179 _cbEventList.emplace_back (++_current_id, nullptr , cbEvent, nullptr , event);
164180 return _cbEventList.back ().id ;
165181}
@@ -169,6 +185,10 @@ network_event_handle_t NetworkEvents::onEvent(NetworkEventSysCb cbEvent, arduino
169185 return 0 ;
170186 }
171187
188+ #if defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
189+ std::lock_guard<std::mutex> lock (_mtx);
190+ #endif // defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
191+
172192 _cbEventList.emplace_back (++_current_id, nullptr , nullptr , cbEvent, event);
173193 return _cbEventList.back ().id ;
174194}
@@ -178,6 +198,10 @@ network_event_handle_t NetworkEvents::onSysEvent(NetworkEventCb cbEvent, arduino
178198 return 0 ;
179199 }
180200
201+ #if defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
202+ std::lock_guard<std::mutex> lock (_mtx);
203+ #endif // defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
204+
181205 _cbEventList.emplace (_cbEventList.begin (), ++_current_id, cbEvent, nullptr , nullptr , event);
182206 return _cbEventList.front ().id ;
183207}
@@ -187,6 +211,10 @@ network_event_handle_t NetworkEvents::onSysEvent(NetworkEventFuncCb cbEvent, ard
187211 return 0 ;
188212 }
189213
214+ #if defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
215+ std::lock_guard<std::mutex> lock (_mtx);
216+ #endif // defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
217+
190218 _cbEventList.emplace (_cbEventList.begin (), ++_current_id, nullptr , cbEvent, nullptr , event);
191219 return _cbEventList.front ().id ;
192220}
@@ -196,6 +224,10 @@ network_event_handle_t NetworkEvents::onSysEvent(NetworkEventSysCb cbEvent, ardu
196224 return 0 ;
197225 }
198226
227+ #if defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
228+ std::lock_guard<std::mutex> lock (_mtx);
229+ #endif // defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
230+
199231 _cbEventList.emplace (_cbEventList.begin (), ++_current_id, nullptr , nullptr , cbEvent, event);
200232 return _cbEventList.front ().id ;
201233}
@@ -205,6 +237,10 @@ void NetworkEvents::removeEvent(NetworkEventCb cbEvent, arduino_event_id_t event
205237 return ;
206238 }
207239
240+ #if defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
241+ std::lock_guard<std::mutex> lock (_mtx);
242+ #endif // defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
243+
208244 _cbEventList.erase (std::remove_if (_cbEventList.begin (), _cbEventList.end (), [cbEvent, event](const NetworkEventCbList_t& e) { return e.cb == cbEvent && e.event == event; }), _cbEventList.end ());
209245}
210246
@@ -213,6 +249,10 @@ void NetworkEvents::removeEvent(NetworkEventFuncCb cbEvent, arduino_event_id_t e
213249 return ;
214250 }
215251
252+ #if defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
253+ std::lock_guard<std::mutex> lock (_mtx);
254+ #endif // defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
255+
216256 _cbEventList.erase (std::remove_if (_cbEventList.begin (), _cbEventList.end (), [cbEvent, event](const NetworkEventCbList_t& e) { return getStdFunctionAddress (e.fcb ) == getStdFunctionAddress (cbEvent) && e.event == event; }), _cbEventList.end ());
217257}
218258
@@ -221,10 +261,18 @@ void NetworkEvents::removeEvent(NetworkEventSysCb cbEvent, arduino_event_id_t ev
221261 return ;
222262 }
223263
264+ #if defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
265+ std::lock_guard<std::mutex> lock (_mtx);
266+ #endif // defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
267+
224268 _cbEventList.erase (std::remove_if (_cbEventList.begin (), _cbEventList.end (), [cbEvent, event](const NetworkEventCbList_t& e) { return e.scb == cbEvent && e.event == event; }), _cbEventList.end ());
225269}
226270
227271void NetworkEvents::removeEvent (network_event_handle_t id) {
272+ #if defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
273+ std::lock_guard<std::mutex> lock (_mtx);
274+ #endif // defined NETWORK_EVENTS_MUTEX && SOC_CPU_CORES_NUM > 1
275+
228276 _cbEventList.erase (std::remove_if (_cbEventList.begin (), _cbEventList.end (), [id](const NetworkEventCbList_t& e) { return e.id == id; }), _cbEventList.end ());
229277}
230278
0 commit comments