2010-02-09 v0.5 r200
------------------------------------------------------------------------
* Prevent namespace pollution by hiding all ELF symbols except for
kqueue() and kevent().
* Add reference counting to the garbage collection mechanism so that
a kqueue object is never destroyed while multiple threads are using
it.
* Improve scalability by using red-black trees instead of linked lists.
* Refactor the internal API to promote modularity and code reuse.
Five methods are added to each filter: create, modify, delete,
enable, disable. These replace the copyin() method, which was
overly complicated.
* Remove the fine-grained locking at the filter level, and replace
it with coarse locking inside kevent(). This simplifys the locking
implementation and provides a stronger guarantee of reentrancy.
* Initial attempt at writing a Linux kernel module. It fails to
link because sys_epoll_create() and other event-related syscalls
are not available to kernelspace (?). Need to ask LKML for guidance.
* Make unit tests threadsafe and created a stresstest which runs
the unit tests in parallel.
* Use helper functions to reduce the amount of duplicate code in the
unit tests.