Use python locking to avoid busy wait.

This commit is contained in:
Stuart Gathman
2013-03-09 22:23:27 +00:00
parent baeddd9fa5
commit 34746823f7
+7 -1
View File
@@ -2,10 +2,13 @@ import time
import logging
import urllib
import sqlite3
import thread
from datetime import datetime
log = logging.getLogger('milter.greylist')
_db_lock = thread.allocate_lock()
class Greylist(object):
def __init__(self,dbname,grey_time=10,grey_expire=4,grey_retain=36):
@@ -35,6 +38,7 @@ class Greylist(object):
def check(self,ip,sender,recipient,timeinc=0):
"Return number of allowed messages for greylist triple."
_db_lock.acquire()
cur = self.conn.execute('begin immediate')
try:
cur.execute('''select firstseen,lastseen,cnt,umis from greylist where
@@ -73,7 +77,9 @@ class Greylist(object):
where ip=? and sender=? and recipient=?''',
(now,now,0,None,ip,sender,recipient))
self.conn.commit()
finally: cur.close()
finally:
cur.close()
_db_lock.release()
return cnt
def close(self):