diff options
Diffstat (limited to 'libc/stdio/_stdio.c')
| -rw-r--r-- | libc/stdio/_stdio.c | 22 | 
1 files changed, 14 insertions, 8 deletions
| diff --git a/libc/stdio/_stdio.c b/libc/stdio/_stdio.c index 3c8d667d2..6c11451fc 100644 --- a/libc/stdio/_stdio.c +++ b/libc/stdio/_stdio.c @@ -74,8 +74,13 @@  #endif  #ifdef __UCLIBC_HAS_THREADS__ +#ifdef __USE_STDIO_FUTEXES__ +#define __STDIO_FILE_INIT_THREADSAFE \ +	2, _LIBC_LOCK_RECURSIVE_INITIALIZER, +#else  #define __STDIO_FILE_INIT_THREADSAFE \  	2, PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP, +#endif  #else  #define __STDIO_FILE_INIT_THREADSAFE  #endif @@ -152,14 +157,13 @@ FILE *__stdout = _stdio_streams + 1; /* For putchar() macro. */  FILE *_stdio_openlist = _stdio_streams;  # ifdef __UCLIBC_HAS_THREADS__ -__UCLIBC_MUTEX_INIT(_stdio_openlist_add_lock, PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP); -#ifdef __STDIO_BUFFERS -__UCLIBC_MUTEX_INIT(_stdio_openlist_del_lock, PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP); +__UCLIBC_IO_MUTEX_INIT(_stdio_openlist_add_lock); +#  ifdef __STDIO_BUFFERS +__UCLIBC_IO_MUTEX_INIT(_stdio_openlist_del_lock);  volatile int _stdio_openlist_use_count = 0;  int _stdio_openlist_del_count = 0; -#endif +#  endif  # endif -  #endif  /**********************************************************************/  #ifdef __UCLIBC_HAS_THREADS__ @@ -167,6 +171,7 @@ int _stdio_openlist_del_count = 0;  /* 2 if threading not initialized and 0 otherwise; */  int _stdio_user_locking = 2; +#ifndef __USE_STDIO_FUTEXES__  void attribute_hidden __stdio_init_mutex(__UCLIBC_MUTEX_TYPE *m)  {  	const __UCLIBC_MUTEX_STATIC(__stdio_mutex_initializer, @@ -174,6 +179,7 @@ void attribute_hidden __stdio_init_mutex(__UCLIBC_MUTEX_TYPE *m)  	memcpy(m, &__stdio_mutex_initializer, sizeof(__stdio_mutex_initializer));  } +#endif  #endif  /**********************************************************************/ @@ -189,10 +195,10 @@ void attribute_hidden _stdio_term(void)  	 * locked, then I suppose there is a chance that a pointer in the  	 * chain might be corrupt due to a partial store.  	 */ -	__stdio_init_mutex(&_stdio_openlist_add_lock); +	STDIO_INIT_MUTEX(_stdio_openlist_add_lock);  #warning check  #ifdef __STDIO_BUFFERS -	__stdio_init_mutex(&_stdio_openlist_del_lock); +	STDIO_INIT_MUTEX(_stdio_openlist_del_lock);  #endif  	/* Next we need to worry about the streams themselves.  If a stream @@ -214,7 +220,7 @@ void attribute_hidden _stdio_term(void)  		}  		ptr->__user_locking = 1; /* Set locking mode to "by caller". */ -		__stdio_init_mutex(&ptr->__lock); /* Shouldn't be necessary, but... */ +		STDIO_INIT_MUTEX(ptr->__lock); /* Shouldn't be necessary, but... */  	}  #endif | 
