diff --git a/app/lib/connection_pool/shared_connection_pool.rb b/app/lib/connection_pool/shared_connection_pool.rb
index 2865a4108d4ff34f7f9fa3f8301a81ef67beb5d4..741529652595a1bb486292ddeb566a79f01e2f47 100644
--- a/app/lib/connection_pool/shared_connection_pool.rb
+++ b/app/lib/connection_pool/shared_connection_pool.rb
@@ -37,7 +37,17 @@ class ConnectionPool::SharedConnectionPool < ConnectionPool
   end
 
   def checkin(preferred_tag)
-    if ::Thread.current[key(preferred_tag)]
+    if preferred_tag.is_a?(Hash) && preferred_tag[:force]
+      # ConnectionPool 2.4+ calls `checkin(force: true)` after fork.
+      # When this happens, we should remove all connections from Thread.current
+
+      ::Thread.current.keys.each do |name| # rubocop:disable Style/HashEachMethods
+        next unless name.to_s.start_with?("#{@key}-")
+
+        @available.push(::Thread.current[name])
+        ::Thread.current[name] = nil
+      end
+    elsif ::Thread.current[key(preferred_tag)]
       if ::Thread.current[key_count(preferred_tag)] == 1
         @available.push(::Thread.current[key(preferred_tag)])
         ::Thread.current[key(preferred_tag)] = nil