Details
-
Bug
-
Status: Open (View Workflow)
-
Major
-
Resolution: Unresolved
-
0.9.58
-
None
-
None
-
None
-
libmariadb3:amd64 1:10.3.22-0+deb10u1
libmariadbclient-dev:amd64 1:10.3.22-0+deb10u1
python3 3.7.3-1
Debian 10.4
Description
I get such segfaults after my script runs for around ten hours:
May 13 21:23:06 xoxoxoxo kernel: [190672.236709] python3[19610]: segfault at 7fb0a802101e ip 00007fb0b7c85487 sp 00007fb0b59173e0 error 4 in libmariadb.so.3[7fb0b7c74000+23000] |
May 13 21:23:06 xoxoxoxo kernel: [190672.241290] Code: 70 48 85 c0 0f 84 2b ff ff ff 8b 53 64 85 d2 0f 84 20 ff ff ff 31 c9 31 d2 eb 0c 0f 1f 84 00 00 00 00 00 48 8b 43 70 48 01 c8 <80> 78 66 00 74 04 c6 40 66 00 8b 43 64 48 83 c2 01 48 83 c1 70 48 |
#!/usr/bin/env python3
|
# pymilter 1.0.3 |
# mariadb 0.9.58 |
|
import Milter |
import mariadb |
|
MAIL_RATE_DB = 'mail_rate_statistics' |
MAIL_RATE_TBL = 'mail_counter' |
|
def main():
|
dbconn = initialize_database()
|
socketname = "/var/run/milters/mail_rate_milter.sock" |
timeout = 300 |
Milter.factory = MailRateMilter
|
Milter.factory.dbconn = dbconn
|
Milter.set_exception_policy(Milter.CONTINUE)
|
Milter.runmilter("mail_rate_milter", socketname, timeout) |
|
def initialize_database():
|
dbconn = mariadb.connect(host='localhost', database='{}'.format(MAIL_RATE_DB)) |
dbconn.auto_reconnect = True
|
return dbconn |
|
class MailRateMilter(Milter.Base): |
def __init__(self):
|
self.id = Milter.uniqueID()
|
self.server = str()
|
|
@Milter.noreply |
def hello(self, hostname):
|
self.server = hostname
|
return Milter.CONTINUE |
|
@Milter.noreply |
def envfrom(self, f, *str):
|
self.add_addr_to_rate_db(f)
|
return Milter.ACCEPT |
|
def add_addr_to_rate_db(self, mail_from):
|
self.dbconn.ping()
|
account = mail_from.strip('<>').partition('@')[0] |
domain = mail_from.strip('<>').partition('@')[2] |
dbcurs = self.dbconn.cursor()
|
sql = "INSERT INTO {} VALUES (CURRENT_TIMESTAMP(3), ?, ?, ?, ?)".format(MAIL_RATE_TBL) |
dbcurs.execute(sql, (mail_from.strip('<>'), account, domain, self.server)) |
|
if __name__=="__main__": |
main()
|