@@ -183,6 +183,8 @@ namespace sio
183
183
std::queue<packet> m_packet_queue;
184
184
185
185
std::mutex m_event_mutex;
186
+
187
+ std::mutex m_packet_mutex;
186
188
187
189
friend class socket ;
188
190
};
@@ -306,9 +308,18 @@ namespace sio
306
308
{
307
309
m_connected = true ;
308
310
m_client->on_socket_opened (m_nsp);
309
- while (!m_packet_queue.empty ()) {
310
- m_client->send (m_packet_queue.front ());
311
+
312
+ while (true ) {
313
+ m_packet_mutex.lock ();
314
+ if (m_packet_queue.empty ())
315
+ {
316
+ m_packet_mutex.unlock ();
317
+ return ;
318
+ }
319
+ sio::packet front_pack = std::move (m_packet_queue.front ());
311
320
m_packet_queue.pop ();
321
+ m_packet_mutex.unlock ();
322
+ m_client->send (front_pack);
312
323
}
313
324
}
314
325
}
@@ -325,9 +336,12 @@ namespace sio
325
336
m_connection_timer.reset ();
326
337
}
327
338
m_connected = false ;
328
- while (!m_packet_queue.empty ()) {
329
- m_packet_queue.pop ();
330
- }
339
+ {
340
+ std::lock_guard<std::mutex> guard (m_packet_mutex);
341
+ while (!m_packet_queue.empty ()) {
342
+ m_packet_queue.pop ();
343
+ }
344
+ }
331
345
client->on_socket_closed (m_nsp);
332
346
client->remove_socket (m_nsp);
333
347
}
@@ -343,6 +357,7 @@ namespace sio
343
357
if (m_connected)
344
358
{
345
359
m_connected = false ;
360
+ std::lock_guard<std::mutex> guard (m_packet_mutex);
346
361
while (!m_packet_queue.empty ()) {
347
362
m_packet_queue.pop ();
348
363
}
@@ -479,14 +494,23 @@ namespace sio
479
494
NULL_GUARD (m_client);
480
495
if (m_connected)
481
496
{
482
- while (!m_packet_queue.empty ()) {
483
- m_client->send (m_packet_queue.front ());
497
+ while (true ) {
498
+ m_packet_mutex.lock ();
499
+ if (m_packet_queue.empty ())
500
+ {
501
+ m_packet_mutex.unlock ();
502
+ break ;
503
+ }
504
+ sio::packet front_pack = std::move (m_packet_queue.front ());
484
505
m_packet_queue.pop ();
506
+ m_packet_mutex.unlock ();
507
+ m_client->send (front_pack);
485
508
}
486
509
m_client->send (p);
487
510
}
488
511
else
489
512
{
513
+ std::lock_guard<std::mutex> guard (m_packet_mutex);
490
514
m_packet_queue.push (p);
491
515
}
492
516
}
0 commit comments