sdlaudio: do not allow multiple instances
Since SDL uses a lot of global data, we can't create independent instances of sdl audio backend. Signed-off-by: Kővágó, Zoltán <DirtY.iCE.hu@gmail.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
		
							parent
							
								
									d1f52a1d70
								
							
						
					
					
						commit
						81ebb07c56
					
				| @ -55,6 +55,7 @@ static struct SDLAudioState { | ||||
|     SDL_mutex *mutex; | ||||
|     SDL_sem *sem; | ||||
|     int initialized; | ||||
|     bool driver_created; | ||||
| } glob_sdl; | ||||
| typedef struct SDLAudioState SDLAudioState; | ||||
| 
 | ||||
| @ -393,6 +394,10 @@ static int sdl_ctl_out (HWVoiceOut *hw, int cmd, ...) | ||||
| static void *sdl_audio_init (void) | ||||
| { | ||||
|     SDLAudioState *s = &glob_sdl; | ||||
|     if (s->driver_created) { | ||||
|         sdl_logerr("Can't create multiple sdl backends\n"); | ||||
|         return NULL; | ||||
|     } | ||||
| 
 | ||||
|     if (SDL_InitSubSystem (SDL_INIT_AUDIO)) { | ||||
|         sdl_logerr ("SDL failed to initialize audio subsystem\n"); | ||||
| @ -414,6 +419,7 @@ static void *sdl_audio_init (void) | ||||
|         return NULL; | ||||
|     } | ||||
| 
 | ||||
|     s->driver_created = true; | ||||
|     return s; | ||||
| } | ||||
| 
 | ||||
| @ -424,6 +430,7 @@ static void sdl_audio_fini (void *opaque) | ||||
|     SDL_DestroySemaphore (s->sem); | ||||
|     SDL_DestroyMutex (s->mutex); | ||||
|     SDL_QuitSubSystem (SDL_INIT_AUDIO); | ||||
|     s->driver_created = false; | ||||
| } | ||||
| 
 | ||||
| static struct audio_option sdl_options[] = { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Kővágó, Zoltán
						Kővágó, Zoltán