On Sat, Jan 17, 2009 at 02:42:28AM +0000, Ian Lynagh wrote:
>
> I think I've found the problem: file_lock_mutex wasn't initialised. I'll
> validate etc tomorrow.
OK, that mostly worked, but ffi014 timed out.
It turns out that "hello world" linked with -threaded -debug deadlocks
at:
ASSERT_LOCK_HELD(&sched_mutex);
at the start of newBoundTask. This is doing
ASSERT(pthread_mutex_lock(&sched_mutex) == EDEADLK)
which requires us to be using error-checking mutexes. However, initMutex
says:
void
initMutex(Mutex* pMut)
{
#if defined(DEBUG)
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_ERRORCHECK_NP);
pthread_mutex_init(pMut,&attr);
#else
pthread_mutex_init(pMut,NULL);
#endif
return;
}
so on OS X we were using the default normal/fast mutexes. OS X does have
PTHREAD_MUTEX_ERRORCHECK (and validate passes if we use it, apart from
hpc_ghc_ghci working on OS X), but I don't know what other OSes use, or
if they have no equivalent.
So what's the best way forward? Use PTHREAD_MUTEX_ERRORCHECK for
non-Linux platforms, and see if anyone reports build failures? Then we
can fix any reported failures, either by setting the appropriate type
for that OS, or by not defining ASSERT_LOCK_HELD on that platform if
none exists.
Thanks
Ian
_______________________________________________
Cvs-ghc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-ghc