w->thread->waitCondition.wait(&w->thread->mutex);
delete fallback;
+
+ // Avoid a shutdown race condition.
+ // If SG is invalidated and 'active' becomes false, the thread's run()
+ // method will exit. handleExposure() relies on QThread::isRunning() (because it
+ // potentially needs to start the thread again) and our mutex cannot be used to
+ // track the thread stopping, so we wait a few nanoseconds extra so the thread
+ // can exit properly.
+ if (!w->thread->active) {
+ QSG_GUI_DEBUG(w->window, " - waiting for render thread to exit");
+ w->thread->wait();
+ QSG_GUI_DEBUG(w->window, " - render thread finished");
+ }
}
w->thread->mutex.unlock();
}