Skip to content

Commit ac3d2c7

Browse files
author
Yongxue Hong
committed
qemu_monitor: Replace select with DefaultSelector to avoid FD limit
Use DefaultSelector instead of select() in Monitor._data_available() to avoid the 1024 file descriptor limit that can cause issues with systems having many open file descriptors. Signed-off-by: Yongxue Hong <yhong@redhat.com>
1 parent 765366d commit ac3d2c7

1 file changed

Lines changed: 8 additions & 6 deletions

File tree

virttest/qemu_monitor.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import logging
1212
import os
1313
import re
14-
import select
14+
import selectors
1515
import socket
1616
import threading
1717
import time
@@ -400,11 +400,13 @@ def _acquire_lock(self, timeout=ACQUIRE_LOCK_TIMEOUT, lock=None):
400400
def _data_available(self, timeout=DATA_AVAILABLE_TIMEOUT):
401401
if self._server_closed:
402402
return False
403-
timeout = max(0, timeout)
404-
try:
405-
return bool(select.select([self._socket], [], [], timeout)[0])
406-
except socket.error as e:
407-
raise MonitorSocketError("Verifying data on monitor socket", e)
403+
404+
with selectors.DefaultSelector() as selector:
405+
try:
406+
selector.register(self._socket, selectors.EVENT_READ)
407+
return bool(selector.select(timeout))
408+
except (ValueError, KeyError) as e:
409+
raise MonitorSocketError("Verifying data on monitor socket", e)
408410

409411
def _recvall(self):
410412
"""

0 commit comments

Comments
 (0)