Thread reaping in test_support is imperfect because, even when a thread has a disappeared from _active and _limbo, the Thread object might still be hanging somewhere in memory (leaving its last instants). This problem manifests itself when trying to fix the transient refleaks in test_socketserver. One solution I've found is to add a _count() method to the thread module, which returns the number of running threads from the point of view of the C extension. When _count() is decremented, we can be sure the Python method has finished running and the Thread object is not hanging around.