[1.4.x] Fixed #18135 -- Close connection used for db version checking
On MySQL when checking the server version, a new connection could be
created but never closed. This could result in open connections on
server startup.
Backport of 4423757c0c
.
This commit is contained in:
parent
d3fa8d92ea
commit
0f69a16785
|
@ -407,11 +407,20 @@ class DatabaseWrapper(BaseDatabaseWrapper):
|
||||||
|
|
||||||
def get_server_version(self):
|
def get_server_version(self):
|
||||||
if not self.server_version:
|
if not self.server_version:
|
||||||
|
new_connection = False
|
||||||
if not self._valid_connection():
|
if not self._valid_connection():
|
||||||
self.cursor()
|
# Ensure we have a connection with the DB by using a temporary
|
||||||
m = server_version_re.match(self.connection.get_server_info())
|
# cursor
|
||||||
|
new_connection = True
|
||||||
|
self.cursor().close()
|
||||||
|
server_info = self.connection.get_server_info()
|
||||||
|
if new_connection:
|
||||||
|
# Make sure we close the connection
|
||||||
|
self.connection.close()
|
||||||
|
self.connection = None
|
||||||
|
m = server_version_re.match(server_info)
|
||||||
if not m:
|
if not m:
|
||||||
raise Exception('Unable to determine MySQL version from version string %r' % self.connection.get_server_info())
|
raise Exception('Unable to determine MySQL version from version string %r' % server_info)
|
||||||
self.server_version = tuple([int(x) for x in m.groups()])
|
self.server_version = tuple([int(x) for x in m.groups()])
|
||||||
return self.server_version
|
return self.server_version
|
||||||
|
|
||||||
|
|
|
@ -65,6 +65,14 @@ class OracleChecks(unittest.TestCase):
|
||||||
self.assertEqual(connection.connection.encoding, "UTF-8")
|
self.assertEqual(connection.connection.encoding, "UTF-8")
|
||||||
self.assertEqual(connection.connection.nencoding, "UTF-8")
|
self.assertEqual(connection.connection.nencoding, "UTF-8")
|
||||||
|
|
||||||
|
class MySQLTests(TestCase):
|
||||||
|
@unittest.skipUnless(connection.vendor == 'mysql',
|
||||||
|
"Test valid only for MySQL")
|
||||||
|
def test_server_version_connections(self):
|
||||||
|
connection.close()
|
||||||
|
connection.get_server_version()
|
||||||
|
self.assertTrue(connection.connection is None)
|
||||||
|
|
||||||
class DateQuotingTest(TestCase):
|
class DateQuotingTest(TestCase):
|
||||||
|
|
||||||
def test_django_date_trunc(self):
|
def test_django_date_trunc(self):
|
||||||
|
|
Loading…
Reference in New Issue