public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Andrew Burgess <aburgess@redhat.com>
To: Eli Zaretskii <eliz@gnu.org>, Pedro Alves <pedro@palves.net>
Cc: gdb-patches@sourceware.org, brobecker@adacore.com
Subject: Re: GDB 12.0.90 available for testing
Date: Fri, 01 Apr 2022 11:12:18 +0100	[thread overview]
Message-ID: <87sfqx864d.fsf@redhat.com> (raw)
In-Reply-To: <83ee2i72vl.fsf@gnu.org>

Eli Zaretskii via Gdb-patches <gdb-patches@sourceware.org> writes:

>> Date: Thu, 31 Mar 2022 10:48:18 +0100
>> Cc: gdb-patches@sourceware.org, Andrew Burgess <aburgess@redhat.com>
>> From: Pedro Alves <pedro@palves.net>
>> 
>> >>   https://sourceware.org/bugzilla/show_bug.cgi?id=29002
>> > 
>> > Ping!  The two issues described in this PR are IMO serious and should
>> > be fixed before GDB 12.1 is released.  Could someone please respond to
>> > what I wrote there, and propose how to fix this without adversely
>> > affecting GNU/Linux (and possibly other non-Windows platforms)?
>> 
>> So from the bugzilla discussion, it sounds like calling setvbuf all the
>> time is a bad idea.  So we should call it once for a given stream early
>> on, just once.  That sounds reasonable to me.  However, the patch you
>> attached in bugzilla doesn't seem to be doing that correctly:
>> 
>> 
>> 836	  if (!done_once && !ISATTY (stream))
>> 837	    {
>> 838	      setbuf (stream, NULL);
>> 839	      done_once = 1;
>> 840	    }
>> 836	
>> 841	
>> 
>> because that will only do it once for all streams, and we need to do this
>> once per stream.
>
> The above was what we did in GDB 11 and before.

But what we used to do wasn't good enough.  On Linux we have to turn off
buffering even when 'ISATTY (stream)' is true, otherwise glibc/kernel
will conspire to hide input from us.

Could you give the patch below a try, please.  It tries to move the
setbuf calls out more so (I hope) they only get done once per stream,
and before we've started reading anything from the stream.

Thanks,
Andrew

---

diff --git a/gdb/event-top.c b/gdb/event-top.c
index b628f0397cb..a55338d78a2 100644
--- a/gdb/event-top.c
+++ b/gdb/event-top.c
@@ -818,19 +818,6 @@ gdb_readline_no_editing_callback (gdb_client_data client_data)
   FILE *stream = ui->instream != nullptr ? ui->instream : ui->stdin_stream;
   gdb_assert (stream != nullptr);
 
-  /* Unbuffer the input stream, so that, later on, the calls to fgetc
-     fetch only one char at the time from the stream.  The fgetc's will
-     get up to the first newline, but there may be more chars in the
-     stream after '\n'.  If we buffer the input and fgetc drains the
-     stream, getting stuff beyond the newline as well, a select, done
-     afterwards will not trigger.
-
-     This unbuffering was, at one point, not applied if the input stream
-     was a tty, however, the buffering can cause problems, even for a tty,
-     in some cases.  Please ensure that any changes in this area run the MI
-     tests with the FORCE_SEPARATE_MI_TTY=1 flag being passed.  */
-  setbuf (stream, NULL);
-
   /* We still need the while loop here, even though it would seem
      obvious to invoke gdb_readline_no_editing_callback at every
      character entered.  If not using the readline library, the
diff --git a/gdb/top.c b/gdb/top.c
index ecd31456f03..456130856e5 100644
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -283,6 +283,8 @@ ui::ui (FILE *instream_, FILE *outstream_, FILE *errstream_)
 {
   buffer_init (&line_buffer);
 
+  setbuf (instream_, NULL);
+
   if (ui_list == NULL)
     ui_list = this;
   else
@@ -412,6 +414,8 @@ read_command_file (FILE *stream)
 {
   struct ui *ui = current_ui;
 
+  setbuf (stream, nullptr);
+
   scoped_restore save_instream
     = make_scoped_restore (&ui->instream, stream);
 


  reply	other threads:[~2022-04-01 10:12 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-20  5:58 Joel Brobecker
2022-03-26 15:26 ` Eli Zaretskii
2022-03-26 15:53   ` Joel Brobecker
2022-03-26 16:15     ` Eli Zaretskii
2022-04-07 16:08       ` Tom Tromey
2022-04-07 16:12         ` Eli Zaretskii
2022-04-07 18:00           ` Joel Brobecker
2022-04-07 18:04             ` Simon Marchi
2022-04-07 19:02             ` Tom Tromey
2022-04-07 19:11               ` Joel Brobecker
2022-04-08 13:38                 ` Tom Tromey
2022-04-08 14:33                   ` Pedro Alves
2022-04-18 15:26                     ` Tom Tromey
2022-04-18 16:13                       ` Tom Tromey
2022-04-07 18:30           ` Tom Tromey
2022-04-08  6:58             ` Eli Zaretskii
2022-04-18 19:28               ` Tom Tromey
2022-03-26 17:59 ` Eli Zaretskii
2022-03-26 18:34   ` Eli Zaretskii
2022-03-26 18:51     ` Eli Zaretskii
2022-03-27  6:27       ` Eli Zaretskii
2022-03-31  6:23         ` Eli Zaretskii
2022-03-31  9:48           ` Pedro Alves
2022-03-31 11:55             ` Eli Zaretskii
2022-04-01 10:12               ` Andrew Burgess [this message]
2022-04-01 11:18                 ` Eli Zaretskii
2022-04-01 11:25                   ` Eli Zaretskii
2022-04-01 15:21                     ` Andrew Burgess
2022-04-01 16:18                       ` Eli Zaretskii
2022-04-03 13:02                         ` Hannes Domani
2022-04-03 13:34                           ` Eli Zaretskii
2022-04-03 14:03                           ` Joel Brobecker
2022-04-03 15:26                             ` Hannes Domani
2022-04-03 15:38                               ` Eli Zaretskii
2022-04-07 11:09                                 ` Eli Zaretskii
2022-04-07 18:03                                   ` Joel Brobecker
2022-04-10 19:06                                     ` Joel Brobecker
2022-04-11 11:42                                       ` Eli Zaretskii
2022-04-17 17:28                                         ` Joel Brobecker
2022-04-19 16:12                                           ` Andrew Burgess
2022-04-19 16:16                                             ` Eli Zaretskii
2022-04-20 13:26                                               ` Andrew Burgess
2022-04-20 17:11                                               ` Joel Brobecker
2022-04-20 17:30                                                 ` Eli Zaretskii
2022-04-24 15:56                                             ` Joel Brobecker
2022-04-25  8:48                                               ` Andrew Burgess
2022-04-07 18:28                                   ` Tom Tromey
2022-04-07 19:22                                   ` Pedro Alves
2022-04-08  4:04                                     ` Eli Zaretskii
2022-04-01 12:36                   ` Joel Brobecker
2022-04-01 12:50                     ` Eli Zaretskii
2022-04-01 14:12                       ` Joel Brobecker
2022-04-01 14:27                         ` Eli Zaretskii
2022-04-01 14:31                           ` Joel Brobecker
2022-04-08 14:44                             ` Pedro Alves
2022-04-08 20:05                               ` Eli Zaretskii
2022-03-27  9:55     ` Eli Zaretskii
2022-03-27  1:55   ` Simon Marchi
2022-03-27  5:20     ` Eli Zaretskii
2022-04-07 16:13       ` Tom Tromey
2022-04-07 16:39         ` Eli Zaretskii
2022-03-31  6:21   ` Eli Zaretskii
2022-03-31  9:44     ` Pedro Alves
2022-03-31 11:58       ` Eli Zaretskii
2022-03-31 12:05         ` Pedro Alves
2022-03-31 14:00           ` Eli Zaretskii
2022-04-12 14:01 ` Luis Machado
2022-04-12 17:57   ` Joel Brobecker
2022-04-13  7:36     ` Luis Machado
2022-04-13 12:19       ` Luis Machado
2022-04-13 16:20         ` Jose E. Marchesi
2022-04-17 17:33           ` Joel Brobecker
2022-04-18  1:48             ` Alan Modra
2022-04-26 13:54             ` Luis Machado
2022-04-26 14:56               ` Joel Brobecker
2022-04-26 15:15                 ` Luis Machado
2022-04-20 17:33 ` Pedro Alves
2022-04-20 17:52   ` Joel Brobecker

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=87sfqx864d.fsf@redhat.com \
    --to=aburgess@redhat.com \
    --cc=brobecker@adacore.com \
    --cc=eliz@gnu.org \
    --cc=gdb-patches@sourceware.org \
    --cc=pedro@palves.net \
    /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 read-only IMAP folder(s) and NNTP newsgroup(s).