Permalink
Browse files

Merge pull request #3258 from ileitch/3-1-stable

Postgres: Do not attempt to deallocate a statement if the connection is no longer active.
  • Loading branch information...
1 parent ef3e149 commit ee9d9fb5fab3cfaa5055e5fb4225b720d3818c94 @tenderlove tenderlove committed Oct 20, 2011
View
8 activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
@@ -289,7 +289,13 @@ def cache
end
def dealloc(key)
- @connection.query "DEALLOCATE #{key}"
+ @connection.query "DEALLOCATE #{key}" if connection_active?
+ end
+
+ def connection_active?
+ @connection.status == PGconn::CONNECTION_OK
+ rescue PGError
+ false
end
end
View
16 activerecord/test/cases/adapters/postgresql/statement_pool_test.rb
@@ -2,6 +2,16 @@
module ActiveRecord::ConnectionAdapters
class PostgreSQLAdapter < AbstractAdapter
+ class InactivePGconn
+ def query(*args)
+ raise PGError
+ end
+
+ def status
+ PGconn::CONNECTION_BAD
+ end
+ end
+
class StatementPoolTest < ActiveRecord::TestCase
def test_cache_is_per_pid
return skip('must support fork') unless Process.respond_to?(:fork)
@@ -18,6 +28,12 @@ def test_cache_is_per_pid
Process.waitpid pid
assert $?.success?, 'process should exit successfully'
end
+
+ def test_dealloc_does_not_raise_on_inactive_connection
+ cache = StatementPool.new InactivePGconn.new, 10
+ cache['foo'] = 'bar'
+ assert_nothing_raised { cache.clear }
+ end
end
end
end

0 comments on commit ee9d9fb

Please sign in to comment.