From 7ba2ef566e1de4046c75b160bf6ea5aa4a087a32 Mon Sep 17 00:00:00 2001 From: Franklin Wei Date: Fri, 2 Aug 2019 22:54:52 -0400 Subject: [PATCH] sdl: use mutex in printf() This prevents lines of output being overwritten by different threads. Change-Id: I24cee52238b53c8a4b2536e082bb4bcd103d8d60 --- apps/plugins/sdl/wrappers.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/apps/plugins/sdl/wrappers.c b/apps/plugins/sdl/wrappers.c index 02e9db1992..efa29ea7b8 100644 --- a/apps/plugins/sdl/wrappers.c +++ b/apps/plugins/sdl/wrappers.c @@ -333,11 +333,24 @@ int fscanf_wrapper(FILE *f, const char *fmt, ...) return 1; } + /* stolen from doom */ // Here is a hacked up printf command to get the output from the game. int printf_wrapper(const char *fmt, ...) { - static int p_xtpt; + static volatile struct mutex printf_mutex; + static volatile int mutex_init = 0; + + if(!mutex_init) + { + rb->mutex_init(&printf_mutex); + mutex_init = 1; + } + + static volatile int p_xtpt; + + rb->mutex_lock(&printf_mutex); + char p_buf[256]; rb->yield(); va_list ap; @@ -362,6 +375,9 @@ int printf_wrapper(const char *fmt, ...) rb->lcd_clear_display(); } } + + rb->mutex_unlock(&printf_mutex); + return 1; }