[FIX] bus: use poll selector on evented mode
Websocket instances use `selectors.DefaultSelector` in order to wait for the socket to be ready for I/O. Gevent replaces the default selector standard implementation by its own, using `select.select` by default. The issue is that `select.select` can only handle fd between 0 and 1023 which leads to select out of range errors when this cap is reached. In order to solve this issue, this commit enforces the use of the `PollSelector` when running in evented mode and when it is available: `select.poll` does not suffer from the same limit as `select.select` does. closes odoo/odoo#127692 X-original-commit: 7e8c0dbe118494c94745ba0fde6290db66d610e2 Signed-off-by: Julien Castiaux (juc) <juc@odoo.com> Signed-off-by: Matthieu Stockbauer (tsm) <tsm@odoo.com>
This commit is contained in:
@@ -241,7 +241,11 @@ class Websocket:
|
||||
self._channels = set()
|
||||
self._last_notif_sent_id = 0
|
||||
# Websocket start up
|
||||
self._selector = selectors.DefaultSelector()
|
||||
self._selector = (
|
||||
selectors.PollSelector()
|
||||
if odoo.evented and hasattr(selectors, 'PollSelector')
|
||||
else selectors.DefaultSelector()
|
||||
)
|
||||
self._selector.register(self._socket, selectors.EVENT_READ)
|
||||
self._selector.register(self._notif_sock_r, selectors.EVENT_READ)
|
||||
self.state = ConnectionState.OPEN
|
||||
|
||||
Reference in New Issue
Block a user