[3.10] bpo-37788: Fix reference leak when Thread is never joined (GH-26103) (GH-26138)



When a Thread is not joined after it has stopped, its lock may remain in the _shutdown_locks set until interpreter shutdown.  If many threads are created this way, the _shutdown_locks set could therefore grow endlessly.  To avoid such a situation, purge expired locks each time a new one is added or removed.
(cherry picked from commit c10c2ec7a0e06975e8010c56c9c3270f8ea322ec)


Co-authored-by: Antoine Pitrou <antoine@python.org>
3 files changed