improve LOCK init

This commit is contained in:
Vitor Santos Costa 2013-10-29 12:41:28 +00:00
parent 80cb87c41c
commit ab9d2da775
2 changed files with 58 additions and 30 deletions

View File

@ -319,6 +319,7 @@ word lookupAtom(const char *s, size_t len)
/* dirty trick to ensure s is null terminated */ /* dirty trick to ensure s is null terminated */
char *st = (char *)s; char *st = (char *)s;
if (st[len])
st[len] = '\0'; st[len] = '\0';
if (len >= strlen(s)) { if (len >= strlen(s)) {
at = YAP_LookupAtom(st); at = YAP_LookupAtom(st);
@ -1300,12 +1301,6 @@ sysError(const char *fm, ...)
#if THREADS #if THREADS
#define COUNT_MUTEX_INITIALIZER(name) \
{ PTHREAD_MUTEX_INITIALIZER, \
name, \
0L \
}
static int static int
recursive_attr(pthread_mutexattr_t **ap) recursive_attr(pthread_mutexattr_t **ap)
{ static int done; { 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 #endif

View File

@ -5039,10 +5039,66 @@ struct PL_local_data *Yap_InitThreadIO(int wid)
return p; 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; i<n; i++, m++)
simpleMutexInit(&m->mutex);
}
#endif
static void static void
init_yap(void) init_yap(void)
{ {
GET_LD GET_LD
#ifdef THREADS
initMutexes();
#endif
/* we need encodings first */ /* we need encodings first */
initCharTypes(); initCharTypes();
initPrologFlags(); initPrologFlags();