DragonFly bugs List (threaded) for 2008-04
Re: Firefox/Thunderbird and SSL not working with libthread_xu
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.