gdb/cli-out.c: clear_current_line shouldn't trigger pagination prompt
authorAaron Merey <amerey@redhat.com>
Tue, 23 May 2023 15:03:32 +0000 (11:03 -0400)
committerAaron Merey <amerey@redhat.com>
Tue, 23 May 2023 15:12:31 +0000 (11:12 -0400)
commit6aebb6e100fb3c5e2acf19f8b0432b3b4fd750e0
tree1914ccf832d97cb05a5b5774be9b528916c0ed52
parent13a3cad698b3a757b1fcc938cc33e09a364ea47a
gdb/cli-out.c: clear_current_line shouldn't trigger pagination prompt

clear_current_line overwrites the current line with chars_per_line
blank spaces.  Printing the final space triggers a condition in
pager_file::puts that causes lines_printed to be incremented.  If
lines_printed becomes greater than or equal to lines_allowed, the
pagination prompt will appear if enabled.

In this case the prompt is unnecessary since after printing the final
space clear_current_line immediately moves the cursor to the beginning
of the line with '\r'.  A new line isn't actually started, so the prompt
ends up being spurious.

Additionally it's possible for gdb to crash during this pagination prompt.
Answering the prompt with 'q' throws an exception intended to bring gdb
back to the main event loop.  But since commit 0fea10f32746,
clear_current_line may be called under the progress_update destructor.
The exception will try to propagate through the destructor, causing an abort.

To fix this, pagination is disabled for the duration for clear_current_line.
clear_current_line is also renamed to clear_progress_notify to help
indicate that it is a special purpose function intended for use with
do_progress_notify.

Acked-by: Eli Zaretskii <eliz@gnu.org>
gdb/cli-out.c
gdb/cli-out.h