delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2016/05/30/18:41:35

X-Recipient: archive-cygwin AT delorie DOT com
DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:subject:to:references:from:message-id:date
:mime-version:in-reply-to:content-type; q=dns; s=default; b=ITo/
aL72wgH2eaQhFpHCH1ZG+u8D4C/NSBe40kVfew3c/e6Ad1nuuWORHAXijeAWy+RG
whPyySkrOVvoXILV3csvKOzRcfZJ5/NBU+SHmfcUkiXIclsOH6USy0hORQJPIvL6
2l0Ilf+u4r/MIb4ByuDLgpm2NtYuP8cSIOdAsJ4=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:subject:to:references:from:message-id:date
:mime-version:in-reply-to:content-type; s=default; bh=uo8aVvVaZO
qZHKOEoce1qJLm878=; b=PNAQAFO5IuHaCTe8fCbVLOq8XIkLKzZNSjQGSJrRuA
KaZseVu4SyhEj5V0n/oIrSRGMmQ9ZxmLPwle1Pkt/sbpRPymzeC/VfTjdCXNUCx+
XSn6j/ispEnSbgP/r3JkalRY5ddLAQqSbhfUF3BpXIFbb/3gFGwziQSxhGXf93Vv
8=
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
Authentication-Results: sourceware.org; auth=none
X-Virus-Found: No
X-Spam-SWARE-Status: No, score=-2.8 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy=strace, cgf, H*MI:sk:e29d08b, H*f:sk:e29d08b
X-HELO: limerock01.mail.cornell.edu
X-CornellRouted: This message has been Routed already.
Subject: Re: gdb pty problem [Was: emacs gud-interface is not updated after gdb command execution (maybe because of incomplete output from gdb)]
To: cygwin AT cygwin DOT com
References: <466943424 DOT 37628 DOT 394d161a-7219-415d-a659-0f774811ad2d DOT open-xchange AT email DOT 1und1 DOT de> <44459aa0-4381-2368-ab63-5dffc26f3344 AT cornell DOT edu> <e29d08b0-aaed-46ea-a4eb-960b1e462692 AT cornell DOT edu>
From: Ken Brown <kbrown AT cornell DOT edu>
Message-ID: <a50d8bef-cc9b-3b35-8812-b26360591662@cornell.edu>
Date: Mon, 30 May 2016 18:41:04 -0400
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.1.0
MIME-Version: 1.0
In-Reply-To: <e29d08b0-aaed-46ea-a4eb-960b1e462692@cornell.edu>
X-PMX-Cornell-Gauge: Gauge=XXXXX
X-IsSubscribed: yes

--------------4DDC1BC81CDB88093C067D02
Content-Type: text/plain; charset=windows-1252; format=flowed
Content-Transfer-Encoding: 7bit

On 5/30/2016 4:02 PM, Ken Brown wrote:
> On 5/26/2016 8:31 AM, Ken Brown wrote:
>> This looks like a bug I reported several years ago; it actually has
>> nothing to do with emacs:
>>
>>   https://www.cygwin.com/ml/cygwin/2011-10/msg00445.html
>>
>> It was fixed but then reappeared some months later:
>>
>>   https://www.cygwin.com/ml/cygwin/2012-05/msg00049.html
>>
>> It was fixed again but apparently is back.  The test case from the
>> original report still exhibits the problem.
>
> I've tracked down the commits that fixed this bug in the past.  The first fix was
>
> commit 31d2bedc585420092eb53895c5f5646651f13215
> Author: Christopher Faylor <me AT cgf DOT cx>
> Date:   Sun Oct 23 19:01:47 2011 +0000
>
>     * fhandler_tty.cc (fhandler_pty_slave::read): Use consistent way for testing
>     ReadFile return.
>     * pipe.cc (fhandler_pipe::create_selectable): Open the write side of the pipe
>     in message-mode to force writing as "chunks".  Explain why.
>
> The second was
>
> commit fb9d631817cc2b5d83c2a6ff928851d201c992bf
> Author: Christopher Faylor <me AT cgf DOT cx>
> Date:   Fri May 4 03:00:43 2012 +0000
>
>     * DevNotes: Add entry cgf-000002.
>     * fhandler_tty.cc (bytes_available): Revert to previous Oct-2011 behavior where
>     a dummy buffer is used to determine how many bytes will be read.
>     (fhandler_pty_master::ioctl): Correct coercion in assignment.
>
> A few weeks later the code was simplified:
>
> commit bd8afa5eb160b56715b805befe850a5ba2131d28
> Author: Christopher Faylor <me AT cgf DOT cx>
> Date:   Wed May 16 01:56:41 2012 +0000
>
>     * DevNotes: Add entry cgf-000008.
>     * fhandler_tty.cc (bytes_available): Simplify by returning the number of bytes
>     available in the message unless that is zero.
>
> I've looked at the current code in the vicinity of these changes, and nothing jumps out at me as obviously breaking the previous fixes; but that doesn't mean much.

FWIW, if I take my original test case, as modified by cgf, and uncomment 
the line "sleep (1);", then the program finishes successfully.  I don't 
know if that provides a clue.

For convenience, I'm attaching the modified test case.

Ken


--------------4DDC1BC81CDB88093C067D02
Content-Type: text/plain; charset=UTF-8;
 name="gdbstc.cc"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="gdbstc.cc"

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pty.h>
#include <string.h>
#include <sys/wait.h>

void get_output (int fd);

int
main (int argc, const char **argv) 
{
  int master;
  pid_t pid;

  if ((pid = forkpty (&master, NULL, NULL, NULL)) < 0)
    {
      perror ("forkpty");
      exit (1);
    }
  /* child */
  if (pid == 0) 
    {
      const char *av[100];
      // putenv ("HOME=/tmp");
      int i = 0;
#ifdef STRACE_GDB
      av[i++] = "strace";
      av[i++] = "-o";
      av[i++] = "/tmp/strace.out";
#ifdef __CYGWIN__
      av[i++] = "--mask=all+paranoid";
#endif
#endif
      av[i++] = argv[1] ?: "gdb";
      fprintf (stderr, "*** using %s\n", av[0]);
      av[i++] = "-i=mi";
      av[i] = NULL;
      execvp (av[0], (char * const *) av);
      /* shouldn't get here */
      exit (1);
    }
  /* parent */
  const char *input[20];

  int i = 0;
  input[i++] = "1-inferior-tty-set /dev/pty3\n";
  input[i++] = "2-gdb-set height 0\n";
  input[i++] = "3-gdb-set non-stop 1\n";
  input[i++] = "4-file-list-exec-source-files\n";
  input[i++] = "5-file-list-exec-source-file\n";
  input[i++] = "6-gdb-show prompt\n";
  input[i++] = "7-stack-info-frame\n";
  input[i++] = "8-thread-info\n";
  input[i++] = "9-break-list\n";
  input[i++] = "q\n";
  input[i] = NULL;

  for (int i = 0; input[i]; ++i)
    {
      write (master, input[i], strlen (input[i]));
      sleep (1);
    }
  get_output (master);
  wait (NULL);
}

void
get_output (int fd)
{
  char buf[4096];

  while (1)
    {
      int nread = read (fd, buf, sizeof (buf));
      if (nread > 0)
	write (STDOUT_FILENO, buf, nread);
      else
	{
	  printf ("No more output.  nread %d\n", nread);
	  break;
	}
    }
}




--------------4DDC1BC81CDB88093C067D02
Content-Type: text/plain; charset=us-ascii

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
--------------4DDC1BC81CDB88093C067D02--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019