From a9f0545d8fbb88ed5be5518dca1b706009b1e794 Mon Sep 17 00:00:00 2001 From: Steven Hiscocks Date: Sun, 9 Feb 2014 23:16:36 +0000 Subject: [PATCH] BF: Add threading lock to database --- fail2ban/server/database.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/fail2ban/server/database.py b/fail2ban/server/database.py index 32e4f173..82bc86ba 100644 --- a/fail2ban/server/database.py +++ b/fail2ban/server/database.py @@ -28,6 +28,7 @@ import sqlite3 import json import locale from functools import wraps +from threading import Lock from .mytime import MyTime from .ticket import FailTicket @@ -51,8 +52,9 @@ else: def commitandrollback(f): @wraps(f) def wrapper(self, *args, **kwargs): - with self._db: # Auto commit and rollback on exception - return f(self, self._db.cursor(), *args, **kwargs) + with self._lock: # Threading lock + with self._db: # Auto commit and rollback on exception + return f(self, self._db.cursor(), *args, **kwargs) return wrapper class Fail2BanDb(object): @@ -92,6 +94,7 @@ class Fail2BanDb(object): def __init__(self, filename, purgeAge=24*60*60): try: + self._lock = Lock() self._db = sqlite3.connect( filename, check_same_thread=False, detect_types=sqlite3.PARSE_DECLTYPES)