From: "Maciej W. Rozycki" <macro@wdc.com>
To: Simon Marchi <simark@simark.ca>
Cc: Pedro Alves <palves@redhat.com>,
gdb-patches@sourceware.org, Jim Wilson <jimw@sifive.com>
Subject: Re: [PATCH v2 2/4] Unregister the last inferior from the event loop
Date: Tue, 21 Jan 2020 11:21:00 -0000 [thread overview]
Message-ID: <alpine.LFD.2.21.2001210747120.15714@redsun52.ssa.fujisawa.hgst.com> (raw)
In-Reply-To: <2f8d9a63-db38-e5c0-d221-dd9b1e151e1b@simark.ca>
Hi Simon,
> > This is because `remote_target::resume' enables the asynchronous event
> > loop, as indicated by the first `infrun: infrun_async(1)' record above,
> > and then the confirmation dialogue temporarily disables it and then
> > reenables, as indicated by the second `infrun: infrun_async(1)' record
> > above. The problem with that approach is that the reenabling also marks
> > the handler for the `infrun_async_inferior_event_token' event ready,
> > even though it was not before the temporary disabling, by calling
> > `mark_async_event_handler' on it, and that triggers the infinite loop as
> > there's no inferior anymore and consequently no event waiting that would
> > stop it.
>
> I don't understand this description. Let's assume that the second call to
> infrun_async indeed left infrun_async_inferior_event_token.ready to true.
> Then I would expect the event loop to call it once, setting the ready flag
> to false. After that, the ready being false, I don't see why the callback
> of infrun_async_inferior_event_token would get called in a loop.
Thanks for looking into it. It's been a while however, so my memory has
become fuzzy on this.
I have therefore gone reading through the code again and what I can see
is that in the async mode the `ready' (readiness) flag is never cleared:
see `infrun_async' and `remote_target::async', which are the only places
to call `clear_async_event_handler' and then only when the async mode is
being disabled.
On the other hand waiting for an inferior event does get disabled in
`handle_inferior_event' regardless of the readiness flag, by calling
`stop_waiting', for certain events, but not for TARGET_WAITKIND_IGNORE.
Instead for that event `prepare_to_wait' is called, which makes sense to
me because such an event does not indicate whether waiting should or
should not be disabled, and with an asynchronous target you can normally
(i.e. if not indicated by a specific event received otherwise, e.g.
TARGET_WAITKIND_EXITED) expect a further event to be received anytime.
Does this clarify the problematic scenario to you?
Maciej
next prev parent reply other threads:[~2020-01-21 8:29 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-06 20:51 [PATCH v2 0/4] GDB fixes for the remote end having gone astray Maciej W. Rozycki
2019-11-06 20:51 ` [PATCH v2 1/4] Remove stale breakpoint step-over information Maciej W. Rozycki
2020-01-21 5:41 ` Simon Marchi
2020-02-19 11:26 ` Luis Machado
2019-11-06 20:52 ` [PATCH v2 4/4] Unregister the inferior from the event loop if failed to resume Maciej W. Rozycki
2020-02-19 13:40 ` Luis Machado
2019-11-06 20:52 ` [PATCH v2 2/4] Unregister the last inferior from the event loop Maciej W. Rozycki
2020-01-21 5:47 ` Simon Marchi
2020-01-21 11:21 ` Maciej W. Rozycki [this message]
2020-01-21 17:34 ` Simon Marchi
2020-01-22 17:35 ` Maciej W. Rozycki
2020-01-23 1:19 ` Maciej W. Rozycki
2020-01-23 5:39 ` Maciej W. Rozycki
2020-01-23 16:59 ` Simon Marchi
2019-11-06 20:52 ` [PATCH v2 3/4] Remove breakpoint step-over information if failed to resume Maciej W. Rozycki
2020-01-21 8:29 ` Simon Marchi
2020-02-19 13:30 ` Luis Machado
2019-11-18 12:38 ` [PING][PATCH v2 0/4] GDB fixes for the remote end having gone astray Maciej W. Rozycki
2019-11-26 15:49 ` [PING^2][PATCH " Maciej W. Rozycki
2019-12-02 14:50 ` [PING^3][PATCH " Maciej W. Rozycki
2019-12-05 20:59 ` Palmer Dabbelt via gdb-patches
2019-12-05 21:21 ` Maciej W. Rozycki
2019-12-09 21:29 ` [PING^4][PATCH " Maciej W. Rozycki
2019-12-17 0:06 ` [PING^5][PATCH " Maciej W. Rozycki
2020-01-06 15:40 ` [PING^6][PATCH " Maciej W. Rozycki
2020-01-13 20:46 ` [PING^7][PATCH " Maciej W. Rozycki
2020-01-21 4:21 ` [PING^8][PATCH " Maciej W. Rozycki
2020-02-10 9:01 ` [PING^10][PATCH " Maciej W. Rozycki
2020-02-17 14:07 ` [PATCH " Maciej W. Rozycki
2020-02-18 10:38 ` Luis Machado
2020-02-19 21:11 ` Tom Tromey
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=alpine.LFD.2.21.2001210747120.15714@redsun52.ssa.fujisawa.hgst.com \
--to=macro@wdc.com \
--cc=gdb-patches@sourceware.org \
--cc=jimw@sifive.com \
--cc=palves@redhat.com \
--cc=simark@simark.ca \
/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