@@ -30,8 +30,6 @@ class DbException(Exception):
3030
3131
3232class DB :
33- _lock = threading .Lock ()
34-
3533 def __init__ (self , dbfile ):
3634 """
3735 Create a connection to sqlite database
@@ -42,6 +40,7 @@ def __init__(self, dbfile):
4240 :__tableName: table name for jobs
4341 """
4442 self .__dbfile = dbfile
43+ self ._lock = threading .Lock ()
4544 try :
4645 log .debug ("Database file: %s" % self .__dbfile )
4746 self .__conn = DB .__create_connection (dbfile )
@@ -77,37 +76,44 @@ def __create_table(self, query):
7776 log .exception ("Database Error: %s" % err )
7877 return 0
7978
80- @staticmethod
81- def __log_and_execute (cursor , sql , args ):
82- with DB ._lock :
79+ def __log_and_execute (self , cursor , sql , args ):
80+ with self ._lock :
8381 log .debug ("SQL command: " + sql .replace ('?' , '%s' ) % args )
8482 cursor .execute (sql , args )
8583
8684 def __insert_or_delete (self , query , params , login = False ):
8785 try :
8886 if login :
89- cursor = DB .__create_connection (self .__dbfile ).cursor ()
87+ conn = DB .__create_connection (self .__dbfile )
88+ cursor = conn .cursor ()
9089 else :
9190 cursor = self .__conn .cursor ()
9291 with cursor :
93- DB .__log_and_execute (cursor , query , params )
92+ self .__log_and_execute (cursor , query , params )
9493 return 1
9594 except apsw .Error as err :
9695 log .exception ("Database Error: %s" % err )
9796 return 0
97+ finally :
98+ if login and 'conn' in locals ():
99+ conn .close ()
98100
99101 def __select (self , query , params , login = False ):
100102 try :
101103 if login :
102- cursor = DB .__create_connection (self .__dbfile ).cursor ()
104+ conn = DB .__create_connection (self .__dbfile )
105+ cursor = conn .cursor ()
103106 else :
104107 cursor = self .__conn .cursor ()
105108 with cursor :
106- DB .__log_and_execute (cursor , query , params )
109+ self .__log_and_execute (cursor , query , params )
107110 return cursor .fetchall ()
108111 except apsw .Error as err :
109112 log .exception ("Database Error: %s" % err )
110113 return None
114+ finally :
115+ if login and 'conn' in locals ():
116+ conn .close ()
111117
112118 def update_job (self , task_id , type , status , vault , error , login = False ):
113119 # this is required as java json convertion fails for None value of error
0 commit comments