From dccf3fc7b9535f4677dc792b0841335977104847 Mon Sep 17 00:00:00 2001 From: Our Air Quality Date: Fri, 23 Feb 2018 22:56:19 +1100 Subject: [PATCH] newlib lock support: uses a separate mutex and recursive mutex. In trying to save memory had incorrectly shared a non-recursive mutex with recursive mutex uses. Initialize one non-recursive mutex too. --- core/newlib_syscalls.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/core/newlib_syscalls.c b/core/newlib_syscalls.c index 452e51d..e304d36 100644 --- a/core/newlib_syscalls.c +++ b/core/newlib_syscalls.c @@ -246,11 +246,10 @@ extern _lock_t __sinit_recursive_mutex; void init_newlib_locks() { - _lock_init(&__arc4random_mutex); - #if 0 - /* Separate mutex for each lock. + /* Used a separate mutex for each lock. * Each mutex uses about 96 bytes which adds up. */ + _lock_init(&__arc4random_mutex); _lock_init(&__at_quick_exit_mutex); //_lock_init(&__dd_hash_mutex); _lock_init(&__tz_mutex); @@ -261,19 +260,20 @@ void init_newlib_locks() _lock_init_recursive(&__sfp_recursive_mutex); _lock_init_recursive(&__sinit_recursive_mutex); #else - /* Reuse the same mutex for all these, reducing memory usage. Newlib - * will still allocate other locks dynamically and some of those need - * to be separate such as the file lock where a thread might block with - * them held. */ + /* Reuse one mutex and one recursive mutex for this set, reducing memory + * usage. Newlib will still allocate other locks dynamically and some of + * those need to be separate such as the file lock where a thread might + * block with them held. */ + _lock_init(&__arc4random_mutex); __at_quick_exit_mutex = __arc4random_mutex; //__dd_hash_mutex = __arc4random_mutex; __tz_mutex = __arc4random_mutex; - __atexit_recursive_mutex = __arc4random_mutex; - __env_recursive_mutex = __arc4random_mutex; - __malloc_recursive_mutex = __arc4random_mutex; - __sfp_recursive_mutex = __arc4random_mutex; - __sinit_recursive_mutex = __arc4random_mutex; + _lock_init_recursive(&__atexit_recursive_mutex); + __env_recursive_mutex = __atexit_recursive_mutex; + __malloc_recursive_mutex = __atexit_recursive_mutex; + __sfp_recursive_mutex = __atexit_recursive_mutex; + __sinit_recursive_mutex = __atexit_recursive_mutex; #endif locks_initialized = 1;