Support for cleaning up threads that have terminated.

Once a BasicThread leaves its run() method, a thread is now marked for
cleaning up, and the ThreadMgr will soon join it to release the OS
resources.

Also, adding a function Log::remove_stream() that remove a logging
stream, stopping all writer threads that are associated with it.

Note, however, that removing a *filter* from a stream still doesn't
clean up any threads. The problem is that because of the output paths
potentially being created dynamically it's unclear if the writer
thread will still be needed in the future. We could add clean writers
up with timeouts, but that doesn't sound great either. So for now, the
only way to sure clean up logging threads is to remove the entire
stream.

Also note that cleanup doesn't work with input threads yet, which
don't seem to terminate (at least in the case I tried).
This commit is contained in:
Robin Sommer 2013-03-14 14:51:10 -07:00
parent b4824f4207
commit 38e1dc9ca4
8 changed files with 104 additions and 4 deletions

View file

@ -54,7 +54,8 @@ public:
/**
* Stops all output to this writer. Calling this methods disables all
* message forwarding to the backend.
* message forwarding to the backend and will eventually remove the
* backend thread.
*
* This method must only be called from the main thread.
*/