[PATCHv2 5/6] gdb: add assert in remote_target::wait relating to async being off
Tom de Vries
tdevries@suse.de
Thu Nov 25 14:17:18 GMT 2021
On 11/25/21 2:46 PM, Andrew Burgess wrote:
> * Tom de Vries <tdevries@suse.de> [2021-11-25 12:36:07 +0100]:
>
>> On 11/25/21 11:04 AM, Andrew Burgess via Gdb-patches wrote:
>>> * Simon Marchi <simark@simark.ca> [2021-11-24 16:23:30 -0500]:
>>>
>>>> On 2021-11-24 7:22 a.m., Andrew Burgess via Gdb-patches wrote:
>>>>> While working on another patch I ended up in a situation where I had
>>>>> async mode disabled (with 'maint set target-async off'), but the async
>>>>> event token got marked anyway.
>>>>>
>>>>> In this situation GDB was continually calling into
>>>>> remote_target::wait, however, the async token would never become
>>>>> unmarked as the unmarking is guarded by target_is_async_p.
>>>>>
>>>>> We could just unconditionally unmark the token, but that would feel
>>>>> like just ignoring a bug, so, instead, lets assert that if
>>>>> !target_is_async_p, then the async token should not be marked.
>>>>>
>>>>> This assertion would have caught my earlier mistake.
>>>>>
>>>>> There should be no user visible changes with this commit.
>>>>> ---
>>>>> gdb/remote.c | 6 +++++-
>>>>> 1 file changed, 5 insertions(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/gdb/remote.c b/gdb/remote.c
>>>>> index 25a4d3cab6e..da8ed81ba78 100644
>>>>> --- a/gdb/remote.c
>>>>> +++ b/gdb/remote.c
>>>>> @@ -8309,9 +8309,13 @@ remote_target::wait (ptid_t ptid, struct target_waitstatus *status,
>>>>> remote_state *rs = get_remote_state ();
>>>>>
>>>>> /* Start by clearing the flag that asks for our wait method to be called,
>>>>> - we'll mark it again at the end if needed. */
>>>>> + we'll mark it again at the end if needed. If the target is not in
>>>>> + async mode then the async token should not be marked. */
>>>>> if (target_is_async_p ())
>>>>> clear_async_event_handler (rs->remote_async_inferior_event_token);
>>>>> + else
>>>>> + gdb_assert (!async_event_handler_marked
>>>>> + (rs->remote_async_inferior_event_token));
>>>>>
>>>>> ptid_t event_ptid;
>>>>>
>>>>> --
>>>>> 2.25.4
>>>>>
>>>>
>>>> LGTM.
>>>>
>>>> I think the series can be merged at least up to here, I think these are
>>>> good cleanups.
>>>
>>> Thanks, I made the change you suggested about one target_can_async_p
>>> function calling the other, and pushed patches 1 to 5.
>>>
>>
>> I'm running into the assert:
>> https://sourceware.org/bugzilla/show_bug.cgi?id=28627 .
>
> Sorry about that. I've reverted this patch, and closed the bug.
>
Np :)
Thanks for the quick fix.
- Tom
> The cause of the assert is fixed by patch #6 in this series, so I
> guess I'll remerge this patch after patch #6 lands.
>
> Thanks,
> Andrew
>
More information about the Gdb-patches
mailing list