| 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 f55c925d34780cdcbe077a85fb28aa296c4d1a9a..dc9fbf53a8c124cc450ddfaba267c17ae4206ef3 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) {
|
|
|