This could be tail-call-optimized but it's not, so we end up overflowing the stack space if we recurse too many times. This was causing crashes when resizing Minesweeper.
@@ -316,9 +316,6 @@ void GEventLoop::process_unprocessed_bundles()
if (coalesced_resizes)
dbgprintf("Coalesced %d resizes\n", coalesced_resizes);
#endif
-
- if (!m_unprocessed_bundles.is_empty())
- process_unprocessed_bundles();
}
bool GEventLoop::drain_messages_from_server()
@@ -43,7 +43,8 @@ private:
virtual void do_processing() override
{
+ while (!m_unprocessed_bundles.is_empty())
+ process_unprocessed_bundles();
void wait_for_event();