Display: Prevent lock around listener calls.

Fixes #15123, crash in Bleach: Soul Carnival 2.
This commit is contained in:
Unknown W. Brackets committed 2021-11-10 19:30:25 -08:00
1 parent 3f4562c552
commit dc843c258d
1 file changed
+12 -4
+12 -4
View File
@@ -371,15 +371,23 @@ void __DisplayForgetFlip(FlipCallback callback, void *userdata) {
}
static void DisplayFireVblank() {
std::lock_guard<std::mutex> guard(listenersLock);
for (VblankCallback cb : vblankListeners) {
std::vector<VblankCallback> toCall = []{
std::lock_guard<std::mutex> guard(listenersLock);
return vblankListeners;
}();
for (VblankCallback cb : toCall) {
cb();
}
}
static void DisplayFireFlip() {
std::lock_guard<std::mutex> guard(listenersLock);
for (auto cb : flipListeners) {
std::vector<FlipListener> toCall = [] {
std::lock_guard<std::mutex> guard(listenersLock);
return flipListeners;
}();
for (FlipListener cb : toCall) {
cb.first(cb.second);
}
}