diff --git a/src/conio/sdl_con.c b/src/conio/sdl_con.c index 01d65302c6551c7925e614865172ee34fb38f9f0..234c160385dec5e6651d35092ac1bbb01876bd64 100644 --- a/src/conio/sdl_con.c +++ b/src/conio/sdl_con.c @@ -48,6 +48,8 @@ SDL_mutex *win_mutex; SDL_Surface *sdl_icon=NULL; SDL_Surface *new_rect=NULL; SDL_mutex *newrect_mutex; +SDL_mutex *bitmap_init_mutex; +static int bitmap_initialized = 0; /* *nix copy/paste stuff */ SDL_sem *sdl_pastebuf_set; @@ -675,6 +677,9 @@ int sdl_init(int mode) } bitmap_init(sdl_drawrect, sdl_flush); + sdl.mutexP(bitmap_init_mutex); + bitmap_initialized=1; + sdl.mutexV(bitmap_init_mutex); if(mode==CIOLIB_MODE_SDL_FULLSCREEN) fullscreen=1; @@ -1540,6 +1545,15 @@ int sdl_video_event_thread(void *data) int rectspace=0; int rectsused=0; + while(1) { + sdl.mutexP(bitmap_init_mutex); + if(bitmap_initialized) { + sdl.mutexV(bitmap_init_mutex); + break; + } + SLEEP(1); + sdl.mutexV(bitmap_init_mutex); + } pthread_mutex_lock(&vstatlock); old_scaling = vstat.scaling; pthread_mutex_unlock(&vstatlock); @@ -1995,6 +2009,7 @@ int sdl_initciolib(int mode) newrect_mutex=sdl.SDL_CreateMutex(); win_mutex=sdl.SDL_CreateMutex(); sdl_keylock=sdl.SDL_CreateMutex(); + bitmap_init_mutex=sdl.SDL_CreateMutex(); #if !defined(NO_X) && defined(__unix__) sdl_pastebuf_set=sdl.SDL_CreateSemaphore(0); sdl_pastebuf_copied=sdl.SDL_CreateSemaphore(0);