drm: Check valid pageflip in handler 97/53197/1
authorSangjin Lee <lsj119@samsung.com>
Wed, 2 Dec 2015 12:36:08 +0000 (21:36 +0900)
committerSangjin Lee <lsj119@samsung.com>
Wed, 2 Dec 2015 12:36:08 +0000 (21:36 +0900)
drmModePageFlip is called twice.
1. output render
2. start_repaint_loop
So the pageflip handler is called twice and relese front buffer for invaild

Change-Id: I00a79f1405001abcb41abcd685ce0c6a3da923c2
Signed-off-by: Sangjin Lee <lsj119@samsung.com>
src/lib/drm/drm-output.c

index 196b14f659a772ebd99b59be01dee334963ab5ee..ba443b6bbe23e683876a0b1486fe57cedc698da9 100644 (file)
@@ -898,13 +898,16 @@ drm_handle_page_flip(int fd, unsigned int frame, unsigned int sec, unsigned int
     drm_output_t       *output = data;
     struct timespec     ts;
 
-    output->page_flip_pending = PEPPER_FALSE;
+    if (output->page_flip_pending == PEPPER_TRUE)
+    {
+        output->page_flip_pending = PEPPER_FALSE;
 
-    if (output->front)
-        drm_buffer_release(output->front);
+        if (output->front)
+            drm_buffer_release(output->front);
 
-    output->front = output->back;
-    output->back = NULL;
+        output->front = output->back;
+        output->back = NULL;
+    }
 
     if (output->vblank_pending_count == 0)
     {