public inbox for cygwin-developers@cygwin.com
 help / color / mirror / Atom feed
From: Takashi Yano <takashi.yano@nifty.ne.jp>
To: cygwin-developers@cygwin.com
Cc: Takashi Yano <takashi.yano@nifty.ne.jp>
Subject: [PATCH v4 0/1] Pseudo console support in PTY (v4)
Date: Fri, 12 Apr 2019 10:22:00 -0000	[thread overview]
Message-ID: <20190412102047.669-1-takashi.yano@nifty.ne.jp> (raw)
In-Reply-To: <4b4aae13-877c-8521-54c5-dcf2dafbc66d@towo.net> <20190406174335.GC4248@calimero.vinschen.de>

Hi Thomas and Corinna,

I revised the patch to v4.

Major chages from v3:
(1) Refine the algorithm for switching I/O between cygwin apps and
    native console apps. This resolves the following issues.
  - Output from native console app cannot be displayed if the app is
    executed in the background. This is because the I/O is switched
    to cygwin shell.
  - When a native console app is foreground, it lose input if you
    execute:
    echo something > /dev/pty*
    from another terminal.
  - The native console app, which just read input without any output,
    fails.
(2) Add error handlings when attaching to pseudo console fails.
(3) The timing of terminating cygwin-console-helper is changed.
    Previously, it was when the pty master opened first was closed.
    Now, it is when the last pty master is closed.
(4) Clear-screen for "synchronization" is limited only to the first
    attach of pty slave.
(5) Procedures after attaching to pseudo console are moved into
    the function: fixup_after_attach().
(6) Avoid that the code page is set to 65001 even when the locale
    is not *.UTF-8. This fixes the issue that shell freezes when
    non ascii chars are typed.
(7) As a test, call init_console_handler() at attaching to pseudo
    console according to Corinna's suggestion.

On Sat, 6 Apr 2019 23:33:04 +0200 Thomas Wolff wrote:
> If I try a non-Unicode terminal session, e.g. running mintty -o Locale=C 
> -o Charset=CP1252 -, and enter a € key, mintty hangs. While you said it 
> doesn't work (yet), it should better not hang at least.

This is resolved by (6).


On Sat, 6 Apr 2019 23:33:04 +0200 Thomas Wolff wrote:
> Output to alternate screen seems to be forced to the primary screen, mostly;
> if I try to switch screen in various ways (menu, echo "\033[?1047h" > 
> /dev/pty1, before or while cmd.exe runs),
> behaviour appears to be inconsistent and not as expected (expected 
> behaviour is that any output goes to the active screen). Again, I don't 
> see a need that you intercept this at all.

This is resolved by (1).


On Sat, 6 Apr 2019 23:33:04 +0200 Thomas Wolff wrote:
> Character output conversion works with my test program (using 
> WriteConsoleW). Using java, output works too (with proper java encoding 
> option), but non-ASCII input characters are replaced by and echoed as space.

Thanks for the test case. This can be reproduced, but the behaviour
is exactly the same as that in the command prompt, in the both cases
(a) and (b) below. So I think it is not the problem of implementation
of pty.

(a)
chcp 65001
java -Dfile.encoding=UTF-8 YourProg

(b)
chcp 1252
java -Dfile.encoding=CP1252 YourProg


Regarding (7),

On Sat, 6 Apr 2019 19:43:35 +0200 Corinna Vinschen wrote:
> This looks better, but there's still some problem:
> $ cygport gawk.cygport build
> >>> Compiling gawk-4.2.62-1.x86_64
> [pressing Ctrl-C multiple times]
>      14 [main] chmod (7016) child_copy: cygheap read copy failed, 0x180376408..0
> x1803887A8, done 0, windows pid 7016, Win32 error 299
>     766 [main] chmod (7016) C:\cygwin64\bin\chmod.exe: *** fatal error - ccalloc would have returned NULL
>      14 [main] chmod (7016) child_copy: cygheap read copy failed, 0x180376408..0x1803887A8, done 0, windows pid 7016, Win32 error 299
>     766 [main] chmod (7016) C:\cygwin64\bin\chmod.exe: *** fatal error - ccalloc
>  would have returned NULL

I cannot reproduce this, but I added init_console_handler() call after
attaching to pseudo console for a test according to your suggestion.
Could you please test?


D=http://tyan0.dip.jp/cygwin
${D}/x86_64/test/cygwin1-20190412.dll.xz
${D}/x86_64/test/cygwin-console-helper.exe.xz
${D}/x86/test/cygwin1-20190412.dll.xz
${D}/x86/test/cygwin-console-helper.exe.xz


Takashi Yano (1):
  Cygwin: pty: add pseudo console support.

 winsup/cygwin/dtable.cc               |  57 +++
 winsup/cygwin/fhandler.h              |  42 +-
 winsup/cygwin/fhandler_console.cc     |  32 ++
 winsup/cygwin/fhandler_tty.cc         | 671 ++++++++++++++++++++++++--
 winsup/cygwin/fork.cc                 |  24 +
 winsup/cygwin/select.cc               |  22 +-
 winsup/cygwin/spawn.cc                |  55 +++
 winsup/cygwin/tty.cc                  |   7 +
 winsup/cygwin/tty.h                   |  23 +-
 winsup/utils/cygwin-console-helper.cc |  14 +-
 10 files changed, 903 insertions(+), 44 deletions(-)

-- 
2.17.0

  reply	other threads:[~2019-04-12 10:22 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-30 13:08 Pseudo console support in PTY Takashi Yano
2019-03-30 19:47 ` Corinna Vinschen
2019-03-30 19:59   ` Corinna Vinschen
2019-03-30 23:07 ` Thomas Wolff
2019-03-31 14:38   ` Corinna Vinschen
2019-03-31 15:00   ` Takashi Yano
2019-04-02 11:02 ` Corinna Vinschen
2019-04-02 17:16   ` Thomas Wolff
2019-04-02 17:51     ` Corinna Vinschen
2019-04-03  7:18       ` Thomas Wolff
2019-04-03  7:28         ` Corinna Vinschen
2019-04-03  7:55           ` Thomas Wolff
2019-04-03  8:02             ` Corinna Vinschen
2019-04-03 11:33               ` Thomas Wolff
2019-04-03 12:17                 ` Corinna Vinschen
2019-04-04  4:17                   ` Takashi Yano
2019-04-04  8:06                     ` Corinna Vinschen
2019-04-04  4:15             ` Takashi Yano
2019-04-03 16:36   ` [PATCH v2 0/1] Pseudo console support in PTY (v2) Takashi Yano
2019-04-03 16:37     ` [PATCH v2 1/1] Cygwin: pty: add pseudo console support Takashi Yano
2019-04-03 16:50     ` [PATCH v2 0/1] Pseudo console support in PTY (v2) Corinna Vinschen
2019-04-04  5:27       ` Takashi Yano
2019-04-04  8:17         ` Thomas Wolff
2019-04-04  9:34           ` Takashi Yano
2019-04-03 17:11     ` Corinna Vinschen
2019-04-04  8:59       ` Takashi Yano
2019-04-04 10:46         ` Corinna Vinschen
2019-04-06 11:13           ` [PATCH v3 0/1] Pseudo console support in PTY (v3) Takashi Yano
2019-04-06 11:14             ` [PATCH v3 1/1] Cygwin: pty: add pseudo console support Takashi Yano
2019-04-06 17:43             ` [PATCH v3 0/1] Pseudo console support in PTY (v3) Corinna Vinschen
2019-04-12 10:22               ` Takashi Yano [this message]
2019-04-12 10:23                 ` [PATCH v4 1/1] Cygwin: pty: add pseudo console support Takashi Yano
2019-04-12 12:29                 ` [PATCH v4 0/1] Pseudo console support in PTY (v4) Corinna Vinschen
2019-04-15  8:18                   ` Corinna Vinschen
2019-04-15 23:17                     ` Takashi Yano
2019-04-14 15:23                 ` [PATCH v5 0/1] Pseudo console support in PTY (v5) Takashi Yano
2019-04-14 15:23                   ` [PATCH v5 1/1] Cygwin: pty: add pseudo console support Takashi Yano
2019-04-15  8:38                     ` Corinna Vinschen
2019-04-16  0:41                       ` Takashi Yano
2019-04-16  9:16                         ` Corinna Vinschen
2019-06-24 10:53                           ` Corinna Vinschen
2019-07-25 14:31                             ` Corinna Vinschen
2019-08-08 19:24                               ` Corinna Vinschen
2019-08-12 12:07                             ` Takashi Yano
2019-08-12 12:50                               ` Corinna Vinschen
2019-08-12 14:36                                 ` Takashi Yano
2019-04-14 16:06                   ` [PATCH v5 0/1] Pseudo console support in PTY (v5) Takashi Yano
2019-04-16  1:49                     ` Takashi Yano
2019-04-16  1:51                       ` Takashi Yano
2019-04-06 21:33             ` [PATCH v3 0/1] Pseudo console support in PTY (v3) Thomas Wolff
2019-04-07  5:05               ` Takashi Yano
2019-04-07 12:02                 ` Takashi Yano
2019-04-07 21:21                 ` Thomas Wolff

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=20190412102047.669-1-takashi.yano@nifty.ne.jp \
    --to=takashi.yano@nifty.ne.jp \
    --cc=cygwin-developers@cygwin.com \
    /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).