[sldev] OSX mutex-related lockups
soft at lindenlab.com
Sun Aug 5 09:09:27 PDT 2007
On 8/4/07, Trevor Powell <trevor at gridbug.org> wrote:
> While testing various patches in an OS X build, I've noticed an issue
> with mutexes. Inside llthread.cpp, line 269, llMutexes create their
> internal mutex objects using the "APR_THREAD_MUTEX_DEFAULT" mutex
> Apparently, under Win32 (I'm reliably informed), this default
> behaviour is the equivalent of APR_THREAD_MUTEX_NESTED, whereas under
> OSX (I've determined through testing), it's the equivalent of
> APR_THREAD_MUTEX_UNNESTED. I haven't tested under Linux, but I
> suspect that it's probably treated as UNNESTED there, as well.
> So this means that if code within a single thread tries to lock a
> single llMutex twice before unlocking it again, it will appear to run
> correctly in all Win32 builds, but will cause a lockup when that same
> code runs under OS X.
The two should definitely have the same behavior here. This sounds
like a design flaw at the least -- definitely patchworthy.
> In my local build, I've modified the llMutex class to explicitly
> request the 'NESTED' mutex type, and this seems to have resolved a
> couple of frequent OS X lockups I've suffered while testing various
Is any of it reproducible, or were the patches in any way related?
> I figure that anything which makes the different platforms
> work more in the same way can only be a good thing, right?
So long as it's moving more things toward the correct implementation, sure. :)
More information about the SLDev