diff options
| author | 2019-06-06 19:21:18 +0100 | |
|---|---|---|
| committer | 2019-06-06 19:21:18 +0100 | |
| commit | 5b7d8dea917a285fb12006cc5295f2eab8d8f138 (patch) | |
| tree | 0abd02c6c47e4d39731f1019167cb5f2de9b726c | |
| parent | print lines as soon as they're read, don't wait for _post_send (diff) | |
| signature | ||
Only trigger read/write threads once
| -rw-r--r-- | src/IRCBot.py | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/IRCBot.py b/src/IRCBot.py index 6cd1f4e6..80446601 100644 --- a/src/IRCBot.py +++ b/src/IRCBot.py @@ -40,6 +40,11 @@ class Bot(object): self._write_poll.register(self._wtrigger_server.fileno(), select.EPOLLIN) + self._rtrigger_lock = threading.Lock() + self._rtriggered = False + self._wtrigger_lock = threading.Lock() + self._wtriggered = False + self._read_thread = None self._write_thread = None @@ -50,9 +55,15 @@ class Bot(object): self.trigger_read() self.trigger_write() def trigger_read(self): - self._rtrigger_client.send(b"TRIGGER") + with self._rtrigger_lock: + if not self._rtriggered: + self._rtriggered = True + self._rtrigger_client.send(b"TRIGGER") def trigger_write(self): - self._wtrigger_client.send(b"TRIGGER") + with self._wtrigger_lock: + if not self._wtriggered: + self._wtriggered = True + self._wtrigger_client.send(b"TRIGGER") def trigger(self, func: typing.Optional[typing.Callable[[], typing.Any]]=None @@ -251,6 +262,8 @@ class Bot(object): if fd == self._wtrigger_server.fileno(): # throw away data from trigger socket self._wtrigger_server.recv(1024) + with self._wtrigger_lock: + self._wtriggered = False elif event & select.EPOLLOUT: self._write_poll.unregister(fd) server = self.servers[fd] @@ -287,6 +300,8 @@ class Bot(object): if fd == self._rtrigger_server.fileno(): # throw away data from trigger socket self._rtrigger_server.recv(1024) + with self._rtrigger_lock: + self._rtriggered = False else: server = self.servers[fd] if event & select.EPOLLIN: |
