diff mbox series

[2/2] monitor/qmp: Stop processing requests when shutdown is requested

Message ID 20210212172028.288825-3-kwolf@redhat.com (mailing list archive)
State New, archived
Headers show
Series monitor: Shutdown fixes | expand

Commit Message

Kevin Wolf Feb. 12, 2021, 5:20 p.m. UTC
monitor_qmp_dispatcher_co() used to check whether shutdown is requested
only when it would have to wait for new requests. If there were still
some queued requests, it would try to execute all of them before
shutting down.

This can be surprising when the queued QMP commands take long or hang
because Ctrl-C may not actually exit QEMU as soon as possible.

Change monitor_qmp_dispatcher_co() so that it additionally checks
whether shutdown is request before it gets a new request from the queue.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 monitor/qmp.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Markus Armbruster Feb. 15, 2021, 12:09 p.m. UTC | #1
Kevin Wolf <kwolf@redhat.com> writes:

> monitor_qmp_dispatcher_co() used to check whether shutdown is requested

"used to": until when?

> only when it would have to wait for new requests. If there were still
> some queued requests, it would try to execute all of them before
> shutting down.
>
> This can be surprising when the queued QMP commands take long or hang
> because Ctrl-C may not actually exit QEMU as soon as possible.
>
> Change monitor_qmp_dispatcher_co() so that it additionally checks
> whether shutdown is request before it gets a new request from the queue.
>
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
>  monitor/qmp.c | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/monitor/qmp.c b/monitor/qmp.c
> index 43880fa623..2326bd7f9b 100644
> --- a/monitor/qmp.c
> +++ b/monitor/qmp.c
> @@ -227,6 +227,11 @@ void coroutine_fn monitor_qmp_dispatcher_co(void *data)
>           */
>          qatomic_mb_set(&qmp_dispatcher_co_busy, false);
>  
> +        /* On shutdown, don't take any more requests from the queue */
> +        if (qmp_dispatcher_co_shutdown) {
> +            return;
> +        }
> +
>          while (!(req_obj = monitor_qmp_requests_pop_any_with_lock())) {
>              /*
>               * No more requests to process.  Wait to be reentered from
Kevin Wolf Feb. 15, 2021, 12:28 p.m. UTC | #2
Am 15.02.2021 um 13:09 hat Markus Armbruster geschrieben:
> Kevin Wolf <kwolf@redhat.com> writes:
> 
> > monitor_qmp_dispatcher_co() used to check whether shutdown is requested
> 
> "used to": until when?

Until right before this patch. Do you prefer present tense to describe
the old state?

Also, does your Tested-by imply that you expect someone else to merge
this series? I'm planning to send a pull request today, so if that was
your intention, I can include it there.

Kevin

> > only when it would have to wait for new requests. If there were still
> > some queued requests, it would try to execute all of them before
> > shutting down.
> >
> > This can be surprising when the queued QMP commands take long or hang
> > because Ctrl-C may not actually exit QEMU as soon as possible.
> >
> > Change monitor_qmp_dispatcher_co() so that it additionally checks
> > whether shutdown is request before it gets a new request from the queue.
> >
> > Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> > ---
> >  monitor/qmp.c | 5 +++++
> >  1 file changed, 5 insertions(+)
> >
> > diff --git a/monitor/qmp.c b/monitor/qmp.c
> > index 43880fa623..2326bd7f9b 100644
> > --- a/monitor/qmp.c
> > +++ b/monitor/qmp.c
> > @@ -227,6 +227,11 @@ void coroutine_fn monitor_qmp_dispatcher_co(void *data)
> >           */
> >          qatomic_mb_set(&qmp_dispatcher_co_busy, false);
> >  
> > +        /* On shutdown, don't take any more requests from the queue */
> > +        if (qmp_dispatcher_co_shutdown) {
> > +            return;
> > +        }
> > +
> >          while (!(req_obj = monitor_qmp_requests_pop_any_with_lock())) {
> >              /*
> >               * No more requests to process.  Wait to be reentered from
Markus Armbruster Feb. 15, 2021, 12:42 p.m. UTC | #3
Kevin Wolf <kwolf@redhat.com> writes:

> Am 15.02.2021 um 13:09 hat Markus Armbruster geschrieben:
>> Kevin Wolf <kwolf@redhat.com> writes:
>> 
>> > monitor_qmp_dispatcher_co() used to check whether shutdown is requested
>> 
>> "used to": until when?
>
> Until right before this patch. Do you prefer present tense to describe
> the old state?

I've done it both ways.  I think present tense works better for me.
Case in point: I wasn't confident I read your commit message correctly,
so I asked.

> Also, does your Tested-by imply that you expect someone else to merge
> this series? I'm planning to send a pull request today, so if that was
> your intention, I can include it there.

I didn't mean to imply anything beyond "I ran my reproducer, and your
patches fix it."

I don't mind you including the fixes in your pull request.  I also don't
mind doing a pull request for your fixes.  Up to you!
Kevin Wolf Feb. 15, 2021, 1:58 p.m. UTC | #4
Am 15.02.2021 um 13:42 hat Markus Armbruster geschrieben:
> Kevin Wolf <kwolf@redhat.com> writes:
> 
> > Am 15.02.2021 um 13:09 hat Markus Armbruster geschrieben:
> >> Kevin Wolf <kwolf@redhat.com> writes:
> >> 
> >> > monitor_qmp_dispatcher_co() used to check whether shutdown is requested
> >> 
> >> "used to": until when?
> >
> > Until right before this patch. Do you prefer present tense to describe
> > the old state?
> 
> I've done it both ways.  I think present tense works better for me.
> Case in point: I wasn't confident I read your commit message correctly,
> so I asked.

I guess I can just add "Before this patch, ..." to clarify.

> > Also, does your Tested-by imply that you expect someone else to merge
> > this series? I'm planning to send a pull request today, so if that was
> > your intention, I can include it there.
> 
> I didn't mean to imply anything beyond "I ran my reproducer, and your
> patches fix it."
> 
> I don't mind you including the fixes in your pull request.  I also
> don't mind doing a pull request for your fixes.  Up to you!

Ok, if you don't mind either way, I'll just fix up the commit message
and include it.

I just asked because it has happened before that everyone was waiting
for someone else to merge a patch. So I made it a habit to ask when a
maintainer replies with some kind of approval without mentioning that
they queued the patch, because that could be a sign that they expect it
to go through a different tree.

Kevin
Markus Armbruster Feb. 15, 2021, 2:22 p.m. UTC | #5
Kevin Wolf <kwolf@redhat.com> writes:

> Am 15.02.2021 um 13:42 hat Markus Armbruster geschrieben:
>> Kevin Wolf <kwolf@redhat.com> writes:
>> 
>> > Am 15.02.2021 um 13:09 hat Markus Armbruster geschrieben:
>> >> Kevin Wolf <kwolf@redhat.com> writes:
>> >> 
>> >> > monitor_qmp_dispatcher_co() used to check whether shutdown is requested
>> >> 
>> >> "used to": until when?
>> >
>> > Until right before this patch. Do you prefer present tense to describe
>> > the old state?
>> 
>> I've done it both ways.  I think present tense works better for me.
>> Case in point: I wasn't confident I read your commit message correctly,
>> so I asked.
>
> I guess I can just add "Before this patch, ..." to clarify.

Yes, please.

>> > Also, does your Tested-by imply that you expect someone else to merge
>> > this series? I'm planning to send a pull request today, so if that was
>> > your intention, I can include it there.
>> 
>> I didn't mean to imply anything beyond "I ran my reproducer, and your
>> patches fix it."
>> 
>> I don't mind you including the fixes in your pull request.  I also
>> don't mind doing a pull request for your fixes.  Up to you!
>
> Ok, if you don't mind either way, I'll just fix up the commit message
> and include it.
>
> I just asked because it has happened before that everyone was waiting
> for someone else to merge a patch. So I made it a habit to ask when a
> maintainer replies with some kind of approval without mentioning that
> they queued the patch, because that could be a sign that they expect it
> to go through a different tree.

Not a bad habit.

Thanks!
diff mbox series

Patch

diff --git a/monitor/qmp.c b/monitor/qmp.c
index 43880fa623..2326bd7f9b 100644
--- a/monitor/qmp.c
+++ b/monitor/qmp.c
@@ -227,6 +227,11 @@  void coroutine_fn monitor_qmp_dispatcher_co(void *data)
          */
         qatomic_mb_set(&qmp_dispatcher_co_busy, false);
 
+        /* On shutdown, don't take any more requests from the queue */
+        if (qmp_dispatcher_co_shutdown) {
+            return;
+        }
+
         while (!(req_obj = monitor_qmp_requests_pop_any_with_lock())) {
             /*
              * No more requests to process.  Wait to be reentered from