summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libweston/compositor-drm.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
index 825e0afe..1198a714 100644
--- a/libweston/compositor-drm.c
+++ b/libweston/compositor-drm.c
@@ -836,7 +836,7 @@ drm_output_repaint(struct weston_output *output_base,
s->fb_last = s->fb_current;
s->fb_current = s->fb_pending;
s->fb_pending = NULL;
- output->vblank_pending = 1;
+ output->vblank_pending++;
}
return 0;
@@ -943,13 +943,14 @@ vblank_handler(int fd, unsigned int frame, unsigned int sec, unsigned int usec,
WP_PRESENTATION_FEEDBACK_KIND_HW_CLOCK;
drm_output_update_msc(output, frame);
- output->vblank_pending = 0;
+ output->vblank_pending--;
+ assert(output->vblank_pending >= 0);
assert(s->fb_last || s->fb_current);
drm_fb_unref(s->fb_last);
s->fb_last = NULL;
- if (!output->page_flip_pending) {
+ if (!output->page_flip_pending && !output->vblank_pending) {
ts.tv_sec = sec;
ts.tv_nsec = usec * 1000;
weston_output_finish_frame(&output->base, &ts, flags);