mirror of
https://github.com/Mikaela/Limnoria.git
synced 2024-11-25 20:29:23 +01:00
Socket: make setTimeout catch errors.
setTimeout may be called as a supybot.drivers.poll callback, which may by the access to supybot.drivers.poll() in _select; so a crash in setTimeout will propage up to _run(), which would cause a random driver to be killed because another one failed and that's bad. For example: INFO 2020-05-27T18:40:18 supybot Received SIGHUP, reloading configuration. ERROR 2020-05-27T18:40:19 supybot Uncaught exception in in drivers.run: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/supybot/drivers/__init__.py", line 104, in run driver.run() File "/usr/lib/python3/dist-packages/supybot/drivers/Socket.py", line 194, in run self._select() File "/usr/lib/python3/dist-packages/supybot/drivers/Socket.py", line 167, in _select [], [], conf.supybot.drivers.poll()) File "/usr/lib/python3/dist-packages/supybot/registry.py", line 422, in __call__ self.set(_cache[self._name]) File "/usr/lib/python3/dist-packages/supybot/registry.py", line 476, in set self.setValue(float(s)) File "/usr/lib/python3/dist-packages/supybot/registry.py", line 495, in setValue super(PositiveFloat, self).setValue(v) File "/usr/lib/python3/dist-packages/supybot/registry.py", line 482, in setValue super(Float, self).setValue(float(v)) File "/usr/lib/python3/dist-packages/supybot/registry.py", line 385, in setValue callback(*args, **kwargs) File "/usr/lib/python3/dist-packages/supybot/drivers/Socket.py", line 305, in setTimeout self.conn.settimeout(conf.supybot.drivers.poll()) OSError: [Errno 9] Bad file descriptor ERROR 2020-05-27T18:40:19 supybot Exception id: 0x86ecf INFO 2020-05-27T18:40:21 supybot Removing driver SocketDriver(Irc object for irchaven).
This commit is contained in:
parent
fabe8a284e
commit
d9b1d1f49d
@ -326,7 +326,10 @@ class SocketDriver(drivers.IrcDriver, drivers.ServersMixin):
|
||||
self._instances.append(self)
|
||||
|
||||
def setTimeout():
|
||||
self.conn.settimeout(conf.supybot.drivers.poll())
|
||||
try:
|
||||
self.conn.settimeout(conf.supybot.drivers.poll())
|
||||
except Exception:
|
||||
drivers.log.exception('Could not set socket timeout:')
|
||||
|
||||
def _checkAndWriteOrReconnect(self):
|
||||
self.writeCheckTime = None
|
||||
|
Loading…
Reference in New Issue
Block a user