sdl: use mutex in printf()

This prevents lines of output being overwritten by different threads.

Change-Id: I24cee52238b53c8a4b2536e082bb4bcd103d8d60
This commit is contained in:
Franklin Wei 2019-08-02 22:54:52 -04:00
parent fee68fc612
commit 7ba2ef566e

View file

@ -333,11 +333,24 @@ int fscanf_wrapper(FILE *f, const char *fmt, ...)
return 1; return 1;
} }
/* stolen from doom */ /* stolen from doom */
// Here is a hacked up printf command to get the output from the game. // Here is a hacked up printf command to get the output from the game.
int printf_wrapper(const char *fmt, ...) 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]; char p_buf[256];
rb->yield(); rb->yield();
va_list ap; va_list ap;
@ -362,6 +375,9 @@ int printf_wrapper(const char *fmt, ...)
rb->lcd_clear_display(); rb->lcd_clear_display();
} }
} }
rb->mutex_unlock(&printf_mutex);
return 1; return 1;
} }