| 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) {
|
|
|