Index: ui/ozone/platform/drm/gpu/drm_surface.cc |
diff --git a/ui/ozone/platform/drm/gpu/drm_surface.cc b/ui/ozone/platform/drm/gpu/drm_surface.cc |
index f3780ff1ffe3a35cca39e33f0004d6a11f04aae9..8d58d5978ca784baa2a42f75fe3884b229d75c0c 100644 |
--- a/ui/ozone/platform/drm/gpu/drm_surface.cc |
+++ b/ui/ozone/platform/drm/gpu/drm_surface.cc |
@@ -99,9 +99,14 @@ void DrmSurface::SchedulePageFlip() { |
// Update our front buffer pointer. |
std::swap(front_buffer_, back_buffer_); |
- pending_pageflip_ = window_->SchedulePageFlip( |
- false /* is_sync */, |
- base::Bind(&DrmSurface::OnPageFlip, weak_ptr_factory_.GetWeakPtr())); |
+ // First set the pending flag otherwise there could be a re-entrancy issue if |
+ // the callback is executed synchronously. |
+ pending_pageflip_ = true; |
+ if (!window_->SchedulePageFlip(false /* is_sync */, |
+ base::Bind(&DrmSurface::OnPageFlip, |
+ weak_ptr_factory_.GetWeakPtr()))) { |
+ pending_pageflip_ = false; |
+ } |
} |
void DrmSurface::OnPageFlip(gfx::SwapResult result) { |