X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fposix%2FOSThreads.c;h=6eb2d2bc8e1039387c2b9a3cad06c6ccfd157a36;hb=0ee0be109fd00ec629f7a2ad6a597885a0c9d5b4;hp=79d395fd33d60c94d0aec868c20eb153eb0e284a;hpb=e4fdc426413d178c86d3ba93702aad5eb17734bf;p=ghc-hetmet.git diff --git a/rts/posix/OSThreads.c b/rts/posix/OSThreads.c index 79d395f..6eb2d2b 100644 --- a/rts/posix/OSThreads.c +++ b/rts/posix/OSThreads.c @@ -94,7 +94,7 @@ osThreadId() } rtsBool -osThreadIsAlive(OSThreadId id) +osThreadIsAlive(OSThreadId id STG_UNUSED) { // no good way to implement this on POSIX, AFAICT. Returning true // is safe. @@ -104,10 +104,10 @@ osThreadIsAlive(OSThreadId id) void initMutex(Mutex* pMut) { -#if defined(DEBUG) && defined(linux_HOST_OS) +#if defined(DEBUG) pthread_mutexattr_t attr; pthread_mutexattr_init(&attr); - pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_ERRORCHECK_NP); + pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_ERRORCHECK); pthread_mutex_init(pMut,&attr); #else pthread_mutex_init(pMut,NULL); @@ -148,6 +148,15 @@ setThreadLocalVar (ThreadLocalKey *key, void *value) } } +void +freeThreadLocalKey (ThreadLocalKey *key) +{ + int r; + if ((r = pthread_key_delete(*key)) != 0) { + barf("freeThreadLocalKey: %s", strerror(r)); + } +} + static void * forkOS_createThreadWrapper ( void * entry ) { @@ -170,6 +179,24 @@ forkOS_createThread ( HsStablePtr entry ) return result; } +nat +getNumberOfProcessors (void) +{ + static nat nproc = 0; + + if (nproc == 0) { +#if defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_ONLN) + nproc = sysconf(_SC_NPROCESSORS_ONLN); +#elif defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_CONF) + nproc = sysconf(_SC_NPROCESSORS_CONF); +#else + nproc = 1; +#endif + } + + return nproc; +} + #else /* !defined(THREADED_RTS) */ int