summaryrefslogtreecommitdiff
path: root/bin/sql_db.py
diff options
context:
space:
mode:
Diffstat (limited to 'bin/sql_db.py')
-rw-r--r--bin/sql_db.py28
1 files changed, 21 insertions, 7 deletions
diff --git a/bin/sql_db.py b/bin/sql_db.py
index b4ce8347f43..dc462526049 100644
--- a/bin/sql_db.py
+++ b/bin/sql_db.py
@@ -299,17 +299,31 @@ class Connection(object):
self.dbname = dbname
self._pool = pool
self._unique = unique
- if unique:
- if dbname not in self.__LOCKS:
- self.__LOCKS[dbname] = threading.Lock()
- self.__LOCKS[dbname].acquire()
- def __del__(self):
+ def __enter__(self):
+ if self._unique:
+ self.lock()
+ return self
+
+ def __exit__(self, exc_type, exc_value, traceback):
if self._unique:
- close_db(self.dbname)
- self.__LOCKS[self.dbname].release()
+ self.release()
+
+ def lock(self):
+ if self.dbname not in self.__LOCKS:
+ self.__LOCKS[self.dbname] = threading.Lock()
+ self.__LOCKS[self.dbname].acquire()
+
+ def release(self):
+ close_db(self.dbname)
+ self.__LOCKS[self.dbname].release()
def cursor(self, serialized=False):
+ if self._unique:
+ lock = self.__LOCKS.get(self.dbname, None)
+ if not (lock and lock.locked()):
+ netsvc.Logger().notifyChannel('Connection', netsvc.LOG_WARNING, 'Unprotected connection to %s' % (self.dbname,))
+
return Cursor(self._pool, self.dbname, serialized=serialized)
def serialized_cursor(self):