@@ -199,16 +199,16 @@ AsyncEventSourceClient::~AsyncEventSourceClient() {
199199}
200200
201201bool AsyncEventSourceClient::_queueMessage (const char *message, size_t len) {
202- if (_messageQueue.size () >= SSE_MAX_QUEUED_MESSAGES) {
203- async_ws_log_w (" Event message queue overflow: discard message" );
204- return false ;
205- }
206-
207202#ifdef ESP32
208203 // length() is not thread-safe, thus acquiring the lock before this call..
209204 std::lock_guard<std::recursive_mutex> lock (_lockmq);
210205#endif
211206
207+ if (_messageQueue.size () >= SSE_MAX_QUEUED_MESSAGES) {
208+ async_ws_log_w (" Event message queue overflow: discard message" );
209+ return false ;
210+ }
211+
212212 if (_client) {
213213 _messageQueue.emplace_back (message, len);
214214 } else {
@@ -230,16 +230,16 @@ bool AsyncEventSourceClient::_queueMessage(const char *message, size_t len) {
230230}
231231
232232bool AsyncEventSourceClient::_queueMessage (AsyncEvent_SharedData_t &&msg) {
233- if (_messageQueue.size () >= SSE_MAX_QUEUED_MESSAGES) {
234- async_ws_log_w (" Event message queue overflow: discard message" );
235- return false ;
236- }
237-
238233#ifdef ESP32
239234 // length() is not thread-safe, thus acquiring the lock before this call..
240235 std::lock_guard<std::recursive_mutex> lock (_lockmq);
241236#endif
242237
238+ if (_messageQueue.size () >= SSE_MAX_QUEUED_MESSAGES) {
239+ async_ws_log_w (" Event message queue overflow: discard message" );
240+ return false ;
241+ }
242+
243243 if (_client) {
244244 _messageQueue.emplace_back (std::move (msg));
245245 } else {
@@ -288,11 +288,11 @@ void AsyncEventSourceClient::_onAck(size_t len __attribute__((unused)), uint32_t
288288}
289289
290290void AsyncEventSourceClient::_onPoll () {
291- if (_messageQueue.size ()) {
292291#ifdef ESP32
293- // Same here, acquiring the lock early
294- std::lock_guard<std::recursive_mutex> lock (_lockmq);
292+ // Acquire the lock early before checking queue size, same as _queueMessage
293+ std::lock_guard<std::recursive_mutex> lock (_lockmq);
295294#endif
295+ if (_messageQueue.size ()) {
296296 _runQueue ();
297297 }
298298}
@@ -379,12 +379,12 @@ void AsyncEventSource::_addClient(AsyncEventSourceClient *client) {
379379}
380380
381381void AsyncEventSource::_handleDisconnect (AsyncEventSourceClient *client) {
382- if (_disconnectcb) {
383- _disconnectcb (client);
384- }
385382#ifdef ESP32
386383 std::lock_guard<std::recursive_mutex> lock (_client_queue_lock);
387384#endif
385+ if (_disconnectcb) {
386+ _disconnectcb (client);
387+ }
388388 for (auto i = _clients.begin (); i != _clients.end (); ++i) {
389389 if (i->get () == client) {
390390 _clients.erase (i);
0 commit comments