From 15afa901578ce94a7254a5e1f2ddad075d28edb9 Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Sat, 7 Dec 2024 06:40:14 -0500 Subject: [PATCH] Allow threads to be stopped externally --- lib/nntp/tiny/session.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/lib/nntp/tiny/session.py b/lib/nntp/tiny/session.py index 2addf86..ca775f6 100644 --- a/lib/nntp/tiny/session.py +++ b/lib/nntp/tiny/session.py @@ -1,6 +1,7 @@ import re import enum import socket +import threading import datetime import fnmatch import traceback @@ -35,10 +36,10 @@ class Session(Connection): RE_SPLIT = re.compile(r'\s+') def __init__(self, server, sock: socket.socket): - self.server = server - self.db: Database = server.connect_to_db() - self.mode: SessionMode = SessionMode.READER - self.active: bool = True + self.server = server + self.db: Database = server.connect_to_db() + self.mode: SessionMode = SessionMode.READER + self.stop: threading.Event = threading.Event() self.newsgroup: Optional[Newsgroup] = None self.user: Optional[User] = None @@ -767,8 +768,8 @@ class Session(Connection): line = self.readline() if line == '': - self.active = False - break + if self.stop.is_set(): + break stripped = line.rstrip() @@ -799,7 +800,7 @@ class Session(Connection): timestamp.strftime("%Y%m%d%H%M%S")) def _cmd_quit(self): - self.active = False + self.stop.set() return self.respond(ResponseCode.NNTP_CONNECTION_CLOSING) @@ -835,7 +836,7 @@ class Session(Connection): line = self.readline() if line == '': - self.active = False + self.stop.set() return tokens = self.RE_SPLIT.split(line.rstrip()) @@ -858,7 +859,7 @@ class Session(Connection): self.greet() try: - while self.active: + while not self.stop.is_set(): self.handle_command() self.sock.close()