On Thu, Jan 15, 2026 at 11:48 AM Daniel P. Berrangé <berrange@redhat.com> wrote:
>
> 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.
>
> Reviewed-by: Thomas Huth <thuth@redhat.com>
> Acked-by: John Snow <jsnow@redhat.com>
> 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
>
Acked-by: John Snow <jsnow@redhat.com>
PS, for your other qemu.qmp fix, it can go in as soon as the pipeline
is fixed, which I (think) I have accomplished here:
https://gitlab.com/qemu-project/python-qemu-qmp/-/merge_requests/47
Sorry for the delay on that.
--js