|
Message-Id: <a89769d80556f16b910417b079afb42ce9e60435.1498228733.git.Jens.Gustedt@inria.fr> Date: Tue, 20 Jun 2017 15:25:51 +0200 From: Jens Gustedt <Jens.Gustedt@...ia.fr> To: musl@...ts.openwall.com Subject: [PATCH 3/8] revise the definition of multiple basic locks in the code This was done by temporarily using a struct type to identify all the users of the __lock an __unlock primitive. In most cases this is just a change from two volatile int to one. One place (__get_locale) also was missing a volatile, a minor bug. --- src/dirent/__dirent.h | 2 +- src/exit/at_quick_exit.c | 2 +- src/exit/atexit.c | 2 +- src/internal/pthread_impl.h | 5 +++-- src/locale/dcngettext.c | 2 +- src/locale/locale_map.c | 2 +- src/locale/setlocale.c | 2 +- src/malloc/lite_malloc.c | 2 +- src/misc/syslog.c | 2 +- src/prng/random.c | 2 +- src/stdio/ofl.c | 2 +- src/thread/pthread_atfork.c | 2 +- src/thread/sem_open.c | 2 +- src/thread/synccall.c | 2 +- src/time/__tz.c | 2 +- 15 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/dirent/__dirent.h b/src/dirent/__dirent.h index 32871baf..101b0368 100644 --- a/src/dirent/__dirent.h +++ b/src/dirent/__dirent.h @@ -4,6 +4,6 @@ struct __dirstream off_t tell; int buf_pos; int buf_end; - volatile int lock[2]; + volatile int lock[1]; char buf[2048]; }; diff --git a/src/exit/at_quick_exit.c b/src/exit/at_quick_exit.c index 34541bad..4e8b119e 100644 --- a/src/exit/at_quick_exit.c +++ b/src/exit/at_quick_exit.c @@ -5,7 +5,7 @@ static void (*funcs[COUNT])(void); static int count; -static volatile int lock[2]; +static volatile int lock[1]; void __funcs_on_quick_exit() { diff --git a/src/exit/atexit.c b/src/exit/atexit.c index 2b58b8bb..cd3b0a64 100644 --- a/src/exit/atexit.c +++ b/src/exit/atexit.c @@ -13,7 +13,7 @@ static struct fl } builtin, *head; static int slot; -static volatile int lock[2]; +static volatile int lock[1]; void __funcs_on_exit() { diff --git a/src/internal/pthread_impl.h b/src/internal/pthread_impl.h index 0622ad52..e1dd4421 100644 --- a/src/internal/pthread_impl.h +++ b/src/internal/pthread_impl.h @@ -39,8 +39,8 @@ struct pthread { int unblock_cancel; volatile int timer_id; locale_t locale; - volatile int killlock[2]; - volatile int exitlock[2]; + volatile int killlock[1]; + volatile int exitlock[1]; volatile int startlock[2]; unsigned long sigmask[_NSIG/8/sizeof(long)]; char *dlerror_buf; @@ -115,6 +115,7 @@ int __clone(int (*)(void *), void *, int, void *, ...); int __set_thread_area(void *); int __libc_sigaction(int, const struct sigaction *, struct sigaction *); int __libc_sigprocmask(int, const sigset_t *, sigset_t *); + void __lock(volatile int *); void __unmapself(void *, size_t); diff --git a/src/locale/dcngettext.c b/src/locale/dcngettext.c index a5ff8475..26023676 100644 --- a/src/locale/dcngettext.c +++ b/src/locale/dcngettext.c @@ -34,7 +34,7 @@ static char *gettextdir(const char *domainname, size_t *dirlen) char *bindtextdomain(const char *domainname, const char *dirname) { - static volatile int lock[2]; + static volatile int lock[1]; struct binding *p, *q; if (!domainname) return 0; diff --git a/src/locale/locale_map.c b/src/locale/locale_map.c index c3e59174..79542310 100644 --- a/src/locale/locale_map.c +++ b/src/locale/locale_map.c @@ -26,7 +26,7 @@ static const char envvars[][12] = { const struct __locale_map *__get_locale(int cat, const char *val) { - static int lock[2]; + static volatile int lock[1]; static void *volatile loc_head; const struct __locale_map *p; struct __locale_map *new = 0; diff --git a/src/locale/setlocale.c b/src/locale/setlocale.c index 8dae5a4e..3af87e05 100644 --- a/src/locale/setlocale.c +++ b/src/locale/setlocale.c @@ -21,7 +21,7 @@ char *__strchrnul(const char *, int); char *setlocale(int cat, const char *name) { - static volatile int lock[2]; + static volatile int lock[1]; if ((unsigned)cat > LC_ALL) return 0; diff --git a/src/malloc/lite_malloc.c b/src/malloc/lite_malloc.c index a7e4a9f7..701f60b4 100644 --- a/src/malloc/lite_malloc.c +++ b/src/malloc/lite_malloc.c @@ -11,7 +11,7 @@ void *__expand_heap(size_t *); static void *__simple_malloc(size_t n) { static char *cur, *end; - static volatile int lock[2]; + static volatile int lock[1]; size_t align=1, pad; void *p; diff --git a/src/misc/syslog.c b/src/misc/syslog.c index 9dd1ddb5..60e9020f 100644 --- a/src/misc/syslog.c +++ b/src/misc/syslog.c @@ -11,7 +11,7 @@ #include <fcntl.h> #include "libc.h" -static volatile int lock[2]; +static volatile int lock[1]; static char log_ident[32]; static int log_opt; static int log_facility = LOG_USER; diff --git a/src/prng/random.c b/src/prng/random.c index 7d557d70..13a5e6df 100644 --- a/src/prng/random.c +++ b/src/prng/random.c @@ -22,7 +22,7 @@ static int n = 31; static int i = 3; static int j = 0; static uint32_t *x = init+1; -static volatile int lock[2]; +static volatile int lock[1]; static uint32_t lcg31(uint32_t x) { return (1103515245*x + 12345) & 0x7fffffff; diff --git a/src/stdio/ofl.c b/src/stdio/ofl.c index b143999c..0e3602aa 100644 --- a/src/stdio/ofl.c +++ b/src/stdio/ofl.c @@ -2,7 +2,7 @@ #include "libc.h" static FILE *ofl_head; -static volatile int ofl_lock[2]; +static volatile int ofl_lock[1]; FILE **__ofl_lock() { diff --git a/src/thread/pthread_atfork.c b/src/thread/pthread_atfork.c index a40d7f63..c6f77b3f 100644 --- a/src/thread/pthread_atfork.c +++ b/src/thread/pthread_atfork.c @@ -8,7 +8,7 @@ static struct atfork_funcs { struct atfork_funcs *prev, *next; } *funcs; -static volatile int lock[2]; +static volatile int lock[1]; void __fork_handler(int who) { diff --git a/src/thread/sem_open.c b/src/thread/sem_open.c index fda0acd3..dc0279e8 100644 --- a/src/thread/sem_open.c +++ b/src/thread/sem_open.c @@ -20,7 +20,7 @@ static struct { sem_t *sem; int refcnt; } *semtab; -static volatile int lock[2]; +static volatile int lock[1]; #define FLAGS (O_RDWR|O_NOFOLLOW|O_CLOEXEC|O_NONBLOCK) diff --git a/src/thread/synccall.c b/src/thread/synccall.c index 000ec4e3..14d40506 100644 --- a/src/thread/synccall.c +++ b/src/thread/synccall.c @@ -14,7 +14,7 @@ static struct chain { sem_t target_sem, caller_sem; } *volatile head; -static volatile int synccall_lock[2]; +static volatile int synccall_lock[1]; static volatile int target_tid; static void (*callback)(void *), *context; static volatile int dummy = 0; diff --git a/src/time/__tz.c b/src/time/__tz.c index 0e0c4ea2..b5951a67 100644 --- a/src/time/__tz.c +++ b/src/time/__tz.c @@ -27,7 +27,7 @@ static char old_tz_buf[32]; static char *old_tz = old_tz_buf; static size_t old_tz_size = sizeof old_tz_buf; -static volatile int lock[2]; +static volatile int lock[1]; static int getint(const char **p) {
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.