]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
Count and pair frame buffer pause and unpause calls
authorRay Strode <rstrode@redhat.com>
Wed, 27 Aug 2008 03:48:54 +0000 (23:48 -0400)
committerRay Strode <rstrode@redhat.com>
Wed, 27 Aug 2008 14:55:36 +0000 (10:55 -0400)
We don't want a nested unpause() to cause a premature
flush of the shadow buffer out to the front buffer.

src/libply/ply-frame-buffer.c

index 8d9c4f246ef670eba496b22188a82b94e0f91349..32f0e6c015eb5e1c80c2121b87552893af0e7683 100644 (file)
@@ -74,7 +74,7 @@ struct _ply_frame_buffer
 
   void (*flush)(ply_frame_buffer_t *buffer);
 
-  uint32_t is_paused : 1;
+  int pause_count;
 };
 
 static bool ply_frame_buffer_open_device (ply_frame_buffer_t  *buffer);
@@ -507,7 +507,7 @@ ply_frame_buffer_flush (ply_frame_buffer_t *buffer)
 {
   assert (buffer != NULL);
 
-  if (buffer->is_paused)
+  if (buffer->pause_count > 0)
     return true;
 
   (*buffer->flush) (buffer);
@@ -538,7 +538,7 @@ ply_frame_buffer_new (const char *device_name)
   buffer->map_address = MAP_FAILED;
   buffer->shadow_buffer = NULL;
 
-  buffer->is_paused = false;
+  buffer->pause_count = 0;
 
   return buffer;
 }
@@ -606,15 +606,15 @@ ply_frame_buffer_pause_updates (ply_frame_buffer_t *buffer)
 {
   assert (buffer != NULL);
 
-  buffer->is_paused = true;
+  buffer->pause_count++;
 }
 
 bool
 ply_frame_buffer_unpause_updates (ply_frame_buffer_t *buffer)
 {
   assert (buffer != NULL);
-  
-  buffer->is_paused = false;
+
+  buffer->pause_count--;
   return ply_frame_buffer_flush (buffer);
 }