This reverts commit a57cb3e23d5ac918a69d0aab918470ff0b429ff9.
The current code now only requires compatibility with Python
3.8 or later.
The conditional usage of 'sendmsg' on the async IO socket
wrapper will generate a deprecation warning on stderr
every time send_fd_scm is used with older Python versions.
This has the effect of breaking the QEMU I/O tests when run
on Python versions before the 'sendmsg' wrapper was removed.
Unconditionally accessing 'sock._sock' ensures we never use
the asyncio socket wrapper, and thus never risk triggering
deprecation warnings on any Python version
Most notably this fixes the QEMU block I/O tests on CentOS
Stream9 that use "sendmsg" for FD passing, which otherwise
generate deprecation messages breaking the expected output
comparison.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
python/qemu/qmp/qmp_client.py | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/python/qemu/qmp/qmp_client.py b/python/qemu/qmp/qmp_client.py
index 8beccfe29d..7a115b693b 100644
--- a/python/qemu/qmp/qmp_client.py
+++ b/python/qemu/qmp/qmp_client.py
@@ -720,12 +720,9 @@ def send_fd_scm(self, fd: int) -> None:
if sock.family != socket.AF_UNIX:
raise QMPError("Sending file descriptors requires a UNIX socket.")
- if not hasattr(sock, 'sendmsg'):
- # We need to void the warranty sticker.
- # Access to sendmsg is scheduled for removal in Python 3.11.
- # Find the real backing socket to use it anyway.
- sock = sock._sock # pylint: disable=protected-access
-
+ # Void the warranty sticker.
+ # Access to sendmsg in asyncio is scheduled for removal in Python 3.11.
+ sock = sock._sock # pylint: disable=protected-access
sock.sendmsg(
[b' '],
[(socket.SOL_SOCKET, socket.SCM_RIGHTS, struct.pack('@i', fd))]
--
2.52.0