From: John Snow <jsnow@redhat.com>
To: "Marc-André Lureau" <marcandre.lureau@gmail.com>
Cc: qemu-devel@nongnu.org, berrange@redhat.com,
Beraldo Leal <bleal@redhat.com>, Cleber Rosa <crosa@redhat.com>
Subject: Re: [PATCH v3 3/3] python/qemu/machine: use socketpair() for QMP by default
Date: Mon, 23 Jan 2023 19:22:49 -0500 [thread overview]
Message-ID: <CAFn=p-bKoDKe_qw1cWD78=iCDz0ZO7tNJhOFpfmRMpkpTzX5Sw@mail.gmail.com> (raw)
In-Reply-To: <CAJ+F1C+JdP6C6_H7jLwQuW1hx18TxGqJhH50uus-+mKjh=xB=A@mail.gmail.com>
On Wed, Jan 18, 2023 at 3:03 AM Marc-André Lureau
<marcandre.lureau@gmail.com> wrote:
>
> Hi
>
> On Wed, Jan 18, 2023 at 2:36 AM John Snow <jsnow@redhat.com> wrote:
> >
> > On Wed, Jan 11, 2023 at 3:01 AM <marcandre.lureau@redhat.com> wrote:
> > >
> > > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> > >
> > > When no monitor address is given, establish the QMP communication through
> > > a socketpair() (API is also supported on Windows since Python 3.5)
> > >
> > > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> > > Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
> > > ---
> > > python/qemu/machine/machine.py | 24 ++++++++++++++++--------
> > > 1 file changed, 16 insertions(+), 8 deletions(-)
> > >
> > > diff --git a/python/qemu/machine/machine.py b/python/qemu/machine/machine.py
> > > index 748a0d807c..5b2e499e68 100644
> > > --- a/python/qemu/machine/machine.py
> > > +++ b/python/qemu/machine/machine.py
> > > @@ -158,17 +158,13 @@ def __init__(self,
> > > self._qmp_timer = qmp_timer
> > >
> > > self._name = name or f"qemu-{os.getpid()}-{id(self):02x}"
> > > + self._sock_pair: Optional[Tuple[socket.socket, socket.socket]] = None
> > > self._temp_dir: Optional[str] = None
> > > self._base_temp_dir = base_temp_dir
> > > self._sock_dir = sock_dir
> > > self._log_dir = log_dir
> > >
> > > - if monitor_address is not None:
> > > - self._monitor_address = monitor_address
> > > - else:
> > > - self._monitor_address = os.path.join(
> > > - self.sock_dir, f"{self._name}-monitor.sock"
> > > - )
> > > + self._monitor_address = monitor_address
> > >
> > > self._console_log_path = console_log
> > > if self._console_log_path:
> > > @@ -303,7 +299,11 @@ def _base_args(self) -> List[str]:
> > > args = ['-display', 'none', '-vga', 'none']
> > >
> > > if self._qmp_set:
> > > - if isinstance(self._monitor_address, tuple):
> > > + if self._sock_pair:
> > > + fd = self._sock_pair[0].fileno()
> > > + os.set_inheritable(fd, True)
> > > + moncdev = f"socket,id=mon,fd={fd}"
> > > + elif isinstance(self._monitor_address, tuple):
> > > moncdev = "socket,id=mon,host={},port={}".format(
> > > *self._monitor_address
> > > )
> > > @@ -337,10 +337,17 @@ def _pre_launch(self) -> None:
> > > self._remove_files.append(self._console_address)
> > >
> > > if self._qmp_set:
> > > + monitor_address = None
> > > + sock = None
> > > + if self._monitor_address is None:
> > > + self._sock_pair = socket.socketpair()
> > > + sock = self._sock_pair[1]
> > > if isinstance(self._monitor_address, str):
> > > self._remove_files.append(self._monitor_address)
> > > + monitor_address = self._monitor_address
> > > self._qmp_connection = QEMUMonitorProtocol(
> > > - self._monitor_address,
> > > + address=monitor_address,
> > > + sock=sock,
> > > server=True,
> > > nickname=self._name
> > > )
> > > @@ -360,6 +367,7 @@ def _pre_launch(self) -> None:
> > > ))
> > >
> > > def _post_launch(self) -> None:
> > > + self._sock_pair[0].close()
> >
> > Needs an assert or an error-check here for _sock_pair to be non-None,
> > otherwise mypy will shout. Try running "make check-dev" from
> > qemu.git/python directory as a smoke test.
>
> Good catch, it should be:
>
> + if self._sock_pair:
> + self._sock_pair[0].close()
>
> Let me know if you want me to resend the whole series, or if you can
> touch it during picking.
Touching it up during picking, running tests, PR soon. Thanks,
--js
next prev parent reply other threads:[~2023-01-24 0:23 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-11 8:00 [PATCH v3 0/3] python/qemu/machine: fix potential hang in QMP accept marcandre.lureau
2023-01-11 8:00 ` [PATCH v3 1/3] python/qmp/protocol: add open_with_socket() marcandre.lureau
2023-01-11 8:01 ` [PATCH v3 2/3] python/qmp/legacy: make QEMUMonitorProtocol accept a socket marcandre.lureau
2023-01-11 8:01 ` [PATCH v3 3/3] python/qemu/machine: use socketpair() for QMP by default marcandre.lureau
2023-01-17 22:36 ` John Snow
2023-01-18 8:02 ` Marc-André Lureau
2023-01-24 0:22 ` John Snow [this message]
2023-03-17 19:36 ` Vladimir Sementsov-Ogievskiy
2023-03-20 10:56 ` Daniel P. Berrangé
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAFn=p-bKoDKe_qw1cWD78=iCDz0ZO7tNJhOFpfmRMpkpTzX5Sw@mail.gmail.com' \
--to=jsnow@redhat.com \
--cc=berrange@redhat.com \
--cc=bleal@redhat.com \
--cc=crosa@redhat.com \
--cc=marcandre.lureau@gmail.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).