The MigrationDestinationManager waits for a thread to join here while holding a session checked out. This thread can do blocking work, such as checking out a different session. This can lead to a deadlock with a thread that is checking out all of the sessions for kill:
(1) MigrationDestinationManager checks out session A.
(2) Killing thread marks all sessions as killed.
(3) Killing thread waits to check out session A for kill.
(4) _thread waits to check out session B, but is blocked because session B is marked as killed.
(5) MigrationDestinationManager waits for _thread to join.