changeset 1979:06c25babe464

Don't hold frame queue mutex while rendering
author Michael Pavone <pavone@retrodev.com>
date Sat, 09 May 2020 21:37:35 -0700
parents 33d5b9b77aef
children 81df9aa2de9b
files render_sdl.c
diffstat 1 files changed, 4 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/render_sdl.c	Sat May 09 21:35:42 2020 -0700
+++ b/render_sdl.c	Sat May 09 21:37:35 2020 -0700
@@ -1709,13 +1709,16 @@
 				SDL_CondWait(frame_ready, frame_mutex);
 			}
 			for (int i = 0; i < frame_queue_len; i++)
+			while (frame_queue_len)
 			{
 				frame f = frame_queue[frame_queue_read++];
 				frame_queue_read &= 0x3;
+				frame_queue_len--;
+				SDL_UnlockMutex(frame_mutex);
 				process_framebuffer(f.buffer, f.which, f.width);
 				release_buffer(f.buffer);
+				SDL_LockMutex(frame_mutex);
 			}
-			frame_queue_len = 0;
 		}
 	
 	SDL_UnlockMutex(frame_mutex);