mirror of
				https://github.com/alsa-project/alsa-lib.git
				synced 2025-11-03 09:01:52 -05:00 
			
		
		
		
	conf.c: use portable way to initialize recursive mutex
PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP is not in POSIX, as _NP (non-portable) suggests. exposing such a symbol in musl libc would lock in the ABI for all times and makes it impossible to do future changes to the under- lying struct without hideous symbol versioning hacks. use the portable way instead: pthread_once was designed for such cases. Signed-off-by: Timo Teräs <timo.teras@iki.fi> Tested-by: John Spencer <maillist-alsa@barfooze.de> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
		
							parent
							
								
									7d06b3ed9f
								
							
						
					
					
						commit
						ae035b7fe5
					
				
					 1 changed files with 13 additions and 2 deletions
				
			
		
							
								
								
									
										15
									
								
								src/conf.c
									
										
									
									
									
								
							
							
						
						
									
										15
									
								
								src/conf.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -427,8 +427,8 @@ beginning:</P>
 | 
			
		|||
#ifndef DOC_HIDDEN
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_LIBPTHREAD
 | 
			
		||||
static pthread_mutex_t snd_config_update_mutex =
 | 
			
		||||
				PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
 | 
			
		||||
static pthread_mutex_t snd_config_update_mutex;
 | 
			
		||||
static pthread_once_t snd_config_update_mutex_once = PTHREAD_ONCE_INIT;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
struct _snd_config {
 | 
			
		||||
| 
						 | 
				
			
			@ -472,8 +472,19 @@ typedef struct {
 | 
			
		|||
 | 
			
		||||
#ifdef HAVE_LIBPTHREAD
 | 
			
		||||
 | 
			
		||||
static void snd_config_init_mutex(void)
 | 
			
		||||
{
 | 
			
		||||
	pthread_mutexattr_t attr;
 | 
			
		||||
 | 
			
		||||
	pthread_mutexattr_init(&attr);
 | 
			
		||||
	pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
 | 
			
		||||
	pthread_mutex_init(&snd_config_update_mutex, &attr);
 | 
			
		||||
	pthread_mutexattr_destroy(&attr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void snd_config_lock(void)
 | 
			
		||||
{
 | 
			
		||||
	pthread_once(&snd_config_update_mutex_once, snd_config_init_mutex);
 | 
			
		||||
	pthread_mutex_lock(&snd_config_update_mutex);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue