diff --git a/src/plugins/platforms/cocoa/qcocoascreen.mm b/src/plugins/platforms/cocoa/qcocoascreen.mm index 55526d6cdc7..bdecf6fa80d 100644 --- a/src/plugins/platforms/cocoa/qcocoascreen.mm +++ b/src/plugins/platforms/cocoa/qcocoascreen.mm @@ -421,22 +421,26 @@ void QCocoaScreen::deliverUpdateRequests() auto windows = QGuiApplication::allWindows(); for (int i = 0; i < windows.size(); ++i) { QWindow *window = windows.at(i); - auto *platformWindow = static_cast(window->handle()); + if (window->screen() != screen()) + continue; + + QPointer platformWindow = static_cast(window->handle()); if (!platformWindow) continue; if (!platformWindow->hasPendingUpdateRequest()) continue; - if (window->screen() != screen()) - continue; - // Skip windows that are not doing update requests via display link if (!platformWindow->updatesWithDisplayLink()) continue; platformWindow->deliverUpdateRequest(); + // platform window can be destroyed in deliverUpdateRequest() + if (!platformWindow) + continue; + // Another update request was triggered, keep the display link running if (platformWindow->hasPendingUpdateRequest()) pauseUpdates = false;