From ab9d2da77580bd9ef2581793858938246383d264 Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Tue, 29 Oct 2013 12:41:28 +0000 Subject: [PATCH] improve LOCK init --- C/pl-yap.c | 32 ++---------------------------- os/pl-file.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 30 deletions(-) diff --git a/C/pl-yap.c b/C/pl-yap.c index a83ab13d2..ab8cddfb5 100755 --- a/C/pl-yap.c +++ b/C/pl-yap.c @@ -319,7 +319,8 @@ word lookupAtom(const char *s, size_t len) /* dirty trick to ensure s is null terminated */ char *st = (char *)s; - st[len] = '\0'; + if (st[len]) + st[len] = '\0'; if (len >= strlen(s)) { at = YAP_LookupAtom(st); } else { @@ -1300,12 +1301,6 @@ sysError(const char *fm, ...) #if THREADS -#define COUNT_MUTEX_INITIALIZER(name) \ - { PTHREAD_MUTEX_INITIALIZER, \ - name, \ - 0L \ - } - static int recursive_attr(pthread_mutexattr_t **ap) { static int done; @@ -1360,27 +1355,4 @@ recursiveMutexInit(recursiveMutex *m) } -counting_mutex _PL_mutexes[] = -{ COUNT_MUTEX_INITIALIZER("L_MISC"), - COUNT_MUTEX_INITIALIZER("L_ALLOC"), - COUNT_MUTEX_INITIALIZER("L_ATOM"), - COUNT_MUTEX_INITIALIZER("L_FLAG"), - COUNT_MUTEX_INITIALIZER("L_FUNCTOR"), - COUNT_MUTEX_INITIALIZER("L_RECORD"), - COUNT_MUTEX_INITIALIZER("L_THREAD"), - COUNT_MUTEX_INITIALIZER("L_PREDICATE"), - COUNT_MUTEX_INITIALIZER("L_MODULE"), - COUNT_MUTEX_INITIALIZER("L_TABLE"), - COUNT_MUTEX_INITIALIZER("L_BREAK"), - COUNT_MUTEX_INITIALIZER("L_FILE"), - COUNT_MUTEX_INITIALIZER("L_PLFLAG"), - COUNT_MUTEX_INITIALIZER("L_OP"), - COUNT_MUTEX_INITIALIZER("L_INIT"), - COUNT_MUTEX_INITIALIZER("L_TERM"), - COUNT_MUTEX_INITIALIZER("L_GC"), - COUNT_MUTEX_INITIALIZER("L_AGC"), - COUNT_MUTEX_INITIALIZER("L_FOREIGN"), - COUNT_MUTEX_INITIALIZER("L_OS") -}; - #endif diff --git a/os/pl-file.c b/os/pl-file.c index 4ac3e5b42..ab3d3824a 100755 --- a/os/pl-file.c +++ b/os/pl-file.c @@ -5039,10 +5039,66 @@ struct PL_local_data *Yap_InitThreadIO(int wid) return p; } +#ifdef THREADS + +#define COUNT_MUTEX_INITIALIZER(name) \ + { PTHREAD_MUTEX_INITIALIZER, \ + name, \ + 0L \ + } + + +counting_mutex _PL_mutexes[] = +{ COUNT_MUTEX_INITIALIZER("L_MISC"), + COUNT_MUTEX_INITIALIZER("L_ALLOC"), + COUNT_MUTEX_INITIALIZER("L_ATOM"), + COUNT_MUTEX_INITIALIZER("L_FLAG"), + COUNT_MUTEX_INITIALIZER("L_FUNCTOR"), + COUNT_MUTEX_INITIALIZER("L_RECORD"), + COUNT_MUTEX_INITIALIZER("L_THREAD"), + COUNT_MUTEX_INITIALIZER("L_PREDICATE"), + COUNT_MUTEX_INITIALIZER("L_MODULE"), + COUNT_MUTEX_INITIALIZER("L_TABLE"), + COUNT_MUTEX_INITIALIZER("L_BREAK"), + COUNT_MUTEX_INITIALIZER("L_FILE"), + COUNT_MUTEX_INITIALIZER("L_PLFLAG"), + COUNT_MUTEX_INITIALIZER("L_OP"), + COUNT_MUTEX_INITIALIZER("L_INIT"), + COUNT_MUTEX_INITIALIZER("L_TERM"), + COUNT_MUTEX_INITIALIZER("L_GC"), + COUNT_MUTEX_INITIALIZER("L_AGC"), + COUNT_MUTEX_INITIALIZER("L_STOPTHEWORLD"), + COUNT_MUTEX_INITIALIZER("L_FOREIGN"), + COUNT_MUTEX_INITIALIZER("L_OS"), + COUNT_MUTEX_INITIALIZER("L_LOCALE") +#ifdef __WINDOWS__ +, COUNT_MUTEX_INITIALIZER("L_DDE") +, COUNT_MUTEX_INITIALIZER("L_CSTACK") +#endif + +}; + +static void +initMutexes( void ) +{ counting_mutex *m; + int n = sizeof(_PL_mutexes)/sizeof(*m); + int i; + + for(i=0, m=_PL_mutexes; imutex); +} + + +#endif + + static void init_yap(void) { GET_LD +#ifdef THREADS + initMutexes(); +#endif /* we need encodings first */ initCharTypes(); initPrologFlags();