@@ -111,6 +111,10 @@ void NetworkEvents::_checkForEvent() {
111
111
}
112
112
log_v (" Network Event: %d - %s" , event->event_id , eventName (event->event_id ));
113
113
114
+ #if SOC_CPU_CORES_NUM > 1
115
+ std::unique_lock<std::mutex> lock (_mtx);
116
+ #endif // SOC_CPU_CORES_NUM > 1
117
+
114
118
// iterate over registered callbacks
115
119
for (auto &i : _cbEventList){
116
120
if (i.cb || i.fcb || i.scb ) {
@@ -130,6 +134,10 @@ void NetworkEvents::_checkForEvent() {
130
134
}
131
135
}
132
136
137
+ #if SOC_CPU_CORES_NUM > 1
138
+ lock.unlock ();
139
+ #endif // SOC_CPU_CORES_NUM > 1
140
+
133
141
// release the event object's memory
134
142
delete event;
135
143
}
@@ -151,6 +159,10 @@ network_event_handle_t NetworkEvents::onEvent(NetworkEventCb cbEvent, arduino_ev
151
159
return 0 ;
152
160
}
153
161
162
+ #if SOC_CPU_CORES_NUM > 1
163
+ std::lock_guard<std::mutex> lock (_mtx);
164
+ #endif // SOC_CPU_CORES_NUM > 1
165
+
154
166
_cbEventList.emplace_back (++_current_id, cbEvent, nullptr , nullptr , event);
155
167
return _cbEventList.back ().id ;
156
168
}
@@ -160,6 +172,10 @@ network_event_handle_t NetworkEvents::onEvent(NetworkEventFuncCb cbEvent, arduin
160
172
return 0 ;
161
173
}
162
174
175
+ #if SOC_CPU_CORES_NUM > 1
176
+ std::lock_guard<std::mutex> lock (_mtx);
177
+ #endif // SOC_CPU_CORES_NUM > 1
178
+
163
179
_cbEventList.emplace_back (++_current_id, nullptr , cbEvent, nullptr , event);
164
180
return _cbEventList.back ().id ;
165
181
}
@@ -169,6 +185,10 @@ network_event_handle_t NetworkEvents::onEvent(NetworkEventSysCb cbEvent, arduino
169
185
return 0 ;
170
186
}
171
187
188
+ #if SOC_CPU_CORES_NUM > 1
189
+ std::lock_guard<std::mutex> lock (_mtx);
190
+ #endif // SOC_CPU_CORES_NUM > 1
191
+
172
192
_cbEventList.emplace_back (++_current_id, nullptr , nullptr , cbEvent, event);
173
193
return _cbEventList.back ().id ;
174
194
}
@@ -178,6 +198,10 @@ network_event_handle_t NetworkEvents::onSysEvent(NetworkEventCb cbEvent, arduino
178
198
return 0 ;
179
199
}
180
200
201
+ #if SOC_CPU_CORES_NUM > 1
202
+ std::lock_guard<std::mutex> lock (_mtx);
203
+ #endif // SOC_CPU_CORES_NUM > 1
204
+
181
205
_cbEventList.emplace (_cbEventList.begin (), ++_current_id, cbEvent, nullptr , nullptr , event);
182
206
return _cbEventList.front ().id ;
183
207
}
@@ -187,6 +211,10 @@ network_event_handle_t NetworkEvents::onSysEvent(NetworkEventFuncCb cbEvent, ard
187
211
return 0 ;
188
212
}
189
213
214
+ #if SOC_CPU_CORES_NUM > 1
215
+ std::lock_guard<std::mutex> lock (_mtx);
216
+ #endif // SOC_CPU_CORES_NUM > 1
217
+
190
218
_cbEventList.emplace (_cbEventList.begin (), ++_current_id, nullptr , cbEvent, nullptr , event);
191
219
return _cbEventList.front ().id ;
192
220
}
@@ -196,6 +224,10 @@ network_event_handle_t NetworkEvents::onSysEvent(NetworkEventSysCb cbEvent, ardu
196
224
return 0 ;
197
225
}
198
226
227
+ #if SOC_CPU_CORES_NUM > 1
228
+ std::lock_guard<std::mutex> lock (_mtx);
229
+ #endif // SOC_CPU_CORES_NUM > 1
230
+
199
231
_cbEventList.emplace (_cbEventList.begin (), ++_current_id, nullptr , nullptr , cbEvent, event);
200
232
return _cbEventList.front ().id ;
201
233
}
@@ -205,6 +237,10 @@ void NetworkEvents::removeEvent(NetworkEventCb cbEvent, arduino_event_id_t event
205
237
return ;
206
238
}
207
239
240
+ #if SOC_CPU_CORES_NUM > 1
241
+ std::lock_guard<std::mutex> lock (_mtx);
242
+ #endif // SOC_CPU_CORES_NUM > 1
243
+
208
244
_cbEventList.erase (std::remove_if (_cbEventList.begin (), _cbEventList.end (), [cbEvent, event](const NetworkEventCbList_t& e) { return e.cb == cbEvent && e.event == event; }), _cbEventList.end ());
209
245
}
210
246
@@ -213,6 +249,10 @@ void NetworkEvents::removeEvent(NetworkEventFuncCb cbEvent, arduino_event_id_t e
213
249
return ;
214
250
}
215
251
252
+ #if SOC_CPU_CORES_NUM > 1
253
+ std::lock_guard<std::mutex> lock (_mtx);
254
+ #endif // SOC_CPU_CORES_NUM > 1
255
+
216
256
_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 ());
217
257
}
218
258
@@ -221,10 +261,18 @@ void NetworkEvents::removeEvent(NetworkEventSysCb cbEvent, arduino_event_id_t ev
221
261
return ;
222
262
}
223
263
264
+ #if SOC_CPU_CORES_NUM > 1
265
+ std::lock_guard<std::mutex> lock (_mtx);
266
+ #endif // SOC_CPU_CORES_NUM > 1
267
+
224
268
_cbEventList.erase (std::remove_if (_cbEventList.begin (), _cbEventList.end (), [cbEvent, event](const NetworkEventCbList_t& e) { return e.scb == cbEvent && e.event == event; }), _cbEventList.end ());
225
269
}
226
270
227
271
void NetworkEvents::removeEvent (network_event_handle_t id) {
272
+ #if SOC_CPU_CORES_NUM > 1
273
+ std::lock_guard<std::mutex> lock (_mtx);
274
+ #endif // SOC_CPU_CORES_NUM > 1
275
+
228
276
_cbEventList.erase (std::remove_if (_cbEventList.begin (), _cbEventList.end (), [id](const NetworkEventCbList_t& e) { return e.id == id; }), _cbEventList.end ());
229
277
}
230
278
0 commit comments