diff --git a/fail2ban/server/database.py b/fail2ban/server/database.py index 24445f3d..639331bf 100644 --- a/fail2ban/server/database.py +++ b/fail2ban/server/database.py @@ -482,7 +482,8 @@ class Fail2BanDb(object): queryArgs.append(str(ip)) query += " ORDER BY ip, timeofban desc" - return cur.execute(query, queryArgs) + # repack iterator as long as in lock: + return list(cur.execute(query, queryArgs)) def getBans(self, **kwargs): """Get bans from the database. @@ -581,7 +582,6 @@ class Fail2BanDb(object): self._bansMergedCache[cacheKey] = tickets if ip is None else ticket return tickets if ip is None else ticket - @commitandrollback def _getCurrentBans(self, cur, jail = None, ip = None, forbantime=None, fromtime=None): if fromtime is None: fromtime = MyTime.time() @@ -606,7 +606,9 @@ class Fail2BanDb(object): tickets = [] ticket = None - results = list(self._getCurrentBans(jail=jail, ip=ip, forbantime=forbantime, fromtime=fromtime)) + with self._lock: + results = list(self._getCurrentBans(self._db.cursor(), + jail=jail, ip=ip, forbantime=forbantime, fromtime=fromtime)) if results: for banip, timeofban, data in results: