A dynamically linked program invokes the rtld cleanup routine via
an atexit handler. This rtld cleanup routine invokes _fini() for
shared libraries, which in-turn invoke __cxa_finalize() with their
DSO handle. By luck, this happens to work okay for non-threaded
programs, but for a threaded program, this leads to deadlock (sometimes
manifested as an assertion failure, if the program didn't actually
create any threads).
Fixed by teaching __cxa_finalize() that it can be recursively invoked,
adjusting the handler list manipulation accordingly.
using, in part, language provided by Gabriel Rosenkoeter. This partially
fixes bin/20525 filed by Peter I. Hansen.
CVS ----------------------------------------------------------------------
This file lets users tune the behavior of the daemon in a easy way, without
having to mess with command line options (nor in rc.conf).
It will also simplify future integration of new functionality within the
program as multiple "modes" of operator are recognized.
The new wsmoused.conf(5) manpage contains all related details.
Some error message cleanup and minor manpage fixes too.
Ok'ed by christos.
* User allocates ZFOD region, but does not actually touch the buffer
to fault in the pages.
* In a loop, user writes this buffer to a network socket, triggering
sosend_loan().
* uvm_loan() calls uvm_loanzero() once for each page in the loaned
region (since the pages have not yet faulted in). This causes a
page to be allocated and zero'd. The result is the kernel spends
a lot of time allocating and zero'ing pages.
This fixes creates a special object which owns a single zero'd page.
This single zero'd page is used to satisfy all loans of non-resident
ZFOD mappings.
Thanks to Allen Briggs for discovering the problem and for providing
an initial patch.