In Pool#checkin we're using ConditionVariable#signal when we should actually be using ConditionVariable#broadcast to wake up all threads. This code as-is leads to a number of scenarios where thread dead-locking is possible.
https://github.com/mongodb/mongo-ruby-driver/blob/master/lib/mongo/util/pool.rb#L169