File tree Expand file tree Collapse file tree 2 files changed +15
-3
lines changed Expand file tree Collapse file tree 2 files changed +15
-3
lines changed Original file line number Diff line number Diff line change @@ -285,10 +285,15 @@ void EventLoop::doRunInLoopFuncs()
285
285
{
286
286
callingFuncs_ = true ;
287
287
{
288
- Func func;
289
- while (funcs_.dequeue (func))
288
+ // the destructor for the Func may itself insert a new entry into the
289
+ // queue
290
+ while (!funcs_.empty ())
290
291
{
291
- func ();
292
+ Func func;
293
+ while (funcs_.dequeue (func))
294
+ {
295
+ func ();
296
+ }
292
297
}
293
298
}
294
299
callingFuncs_ = false ;
Original file line number Diff line number Diff line change @@ -86,6 +86,13 @@ class MpscQueue : public NonCopyable
86
86
return true ;
87
87
}
88
88
89
+ bool empty ()
90
+ {
91
+ BufferNode *tail = tail_.load (std::memory_order_relaxed);
92
+ BufferNode *next = tail->next_ .load (std::memory_order_acquire);
93
+ return next == nullptr ;
94
+ }
95
+
89
96
private:
90
97
struct BufferNode
91
98
{
You can’t perform that action at this time.
0 commit comments