From a20f325f80489d392902751db7f30fd67aa393bb Mon Sep 17 00:00:00 2001 From: sebres Date: Fri, 9 Sep 2016 17:36:01 +0200 Subject: [PATCH] database: stability fix - repack cursor iterator as long as locked --- fail2ban/server/database.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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: