From 2d503ad0fa1ab38ff4d6bf4a8662e303a4e9a476 Mon Sep 17 00:00:00 2001 From: dim Date: Wed, 21 May 2008 07:44:30 +0000 Subject: [PATCH] Close database connection on PGLoader object destruction, and on terminate() too --- pgloader/db.py | 12 ++++++++---- pgloader/pgloader.py | 8 ++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/pgloader/db.py b/pgloader/db.py index 20398c0..0feb75a 100644 --- a/pgloader/db.py +++ b/pgloader/db.py @@ -89,9 +89,16 @@ class db: self.commits += 1 self.commited_rows += self.running_commands + self.close() + + def close(self): + """ close self.dbconn PostgreSQL connection """ if self.dbconn is not None: + self.log.debug('closing current connection') self.dbconn.close() + self.dbconn = None + def set_encoding(self): """ set connection encoding to self.client_encoding """ # debug only cause reconnecting happens on every @@ -195,10 +202,7 @@ ORDER BY attnum self.partial_coldef = None try: - if self.dbconn is not None: - self.log.debug('Debug: closing current connection') - self.dbconn.close() - + self.close() self.log.debug('Debug: connecting to dns %s', self.dsn) self.dbconn = psycopg.connect(self.dsn) diff --git a/pgloader/pgloader.py b/pgloader/pgloader.py index 14149d1..3ce9a50 100644 --- a/pgloader/pgloader.py +++ b/pgloader/pgloader.py @@ -152,6 +152,10 @@ class PGLoader(threading.Thread): self.log.debug('%s init done' % name) + def __del__(self): + """ PGLoader destructor, we close the db connection """ + self.db.close() + def _dbconnect(self, config): """ connects to database """ section = 'pgsql' @@ -841,6 +845,10 @@ class PGLoader(threading.Thread): def terminate(self): """ Announce it's over and free the concurrency control semaphore """ + # force PostgreSQL connection closing, do not wait for garbage + # collector + self.db.close() + self.log.debug("releasing %s semaphore" % self.logname) self.sem.release()