A thread from the pool might use thread locals which are - for whatever reason - not cleaned up, when the thread is put back into the pool.
This can lead to memory leaks.
We should protect against this.
Unfortunately there is no official API to clean up thread locals. There are solutions out there using reflection.
Another option is to simply discard the thread object after some time of usage and use a fresh one. This needs to include thread objects staying in the pool for a long time