From a62c90d09276d9a1e5ec13c64aac691d8b5e1025 Mon Sep 17 00:00:00 2001 From: "Brian J. Cardiff" Date: Tue, 13 Sep 2016 01:36:49 -0300 Subject: [PATCH] remove connection from pool if explicitly closed --- src/db/connection.cr | 1 + src/db/pool.cr | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/db/connection.cr b/src/db/connection.cr index 5c3d407..d6a8ee2 100644 --- a/src/db/connection.cr +++ b/src/db/connection.cr @@ -38,6 +38,7 @@ module DB protected def do_close @statements_cache.each_value &.close @statements_cache.clear + @database.pool.delete self end end end diff --git a/src/db/pool.cr b/src/db/pool.cr index e56be3d..15ca7f1 100644 --- a/src/db/pool.cr +++ b/src/db/pool.cr @@ -88,8 +88,7 @@ module DB rescue e : ConnectionLost # if the connection is lost close it to release resources # and remove it from the known pool. - @total.delete(e.connection) - @available.delete(e.connection) + delete(e.connection) e.connection.close end end @@ -103,11 +102,17 @@ module DB end end - # :nodon: + # :nodoc: def is_available?(resource : T) @available.includes?(resource) end + # :nodoc: + def delete(resource : T) + @total.delete(resource) + @available.delete(resource) + end + private def build_resource : T resource = @factory.call @total << resource