I've found the problem.  What is happening is that firefox is 
    fork()ing and this is changing the pages the mutexes are waiting on
    in to copy-on-write.  The causes the page to be reassigned and 
    the original umtx_sleep() no longer matches the umtx_wakeup().

    I also found a couple of races in libthread_xu, but those weren't
    the main issue.

    The ktrace output was wrong, due to some issues with ktrace and
    multi-threaded programs.  It was calling umtx_wakeup().

    I am considering my options.  It can be solved fairly easily by
    polling the memory location once a second to catch COW's.  Unfortunately
    we can't really sleep on virtual addresses, since pages can be mapped
    and I really want the umtx*() calls to work with shared memory. 

    At the moment I do not have a clean solution but I will commit a fix
    later today even if it isn't perfect.

                                        -Matt
                                        Matthew Dillon 
                                        <[EMAIL PROTECTED]>

Reply via email to