public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
* Cygwin hangs up if several keys are typed during outputting a lot of texts.
@ 2015-02-28 12:40 Takashi Yano
  2015-02-28 13:16 ` Denis Excoffier
  2015-02-28 17:56 ` Corinna Vinschen
  0 siblings, 2 replies; 29+ messages in thread
From: Takashi Yano @ 2015-02-28 12:40 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 523 bytes --]

Package: cygwin
Version: 1.7.34-6

Cygwin often hangs up if several keys are input during a lot of text outputs.

To reproduce this problem:
1) Start a new cygwin session on mintty.
2) Execute
     yes AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
   or
     od /dev/urandom
3) Hit 'a' key several times during text outputs.

If echo is disabled like:
     stty -echo; yes AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
the problem does not occur.


-- 
Takashi Yano <takashi.yano@nifty.ne.jp>

[-- Attachment #2: cygcheck.out --]
[-- Type: application/octet-stream, Size: 100058 bytes --]


Cygwin Configuration Diagnostics
Current System Time: Sat Feb 28 05:19:48 2015

Windows 7 Professional Ver 6.1 Build 7601 Service Pack 1

Path:	C:\cygwin64\usr\local\bin
	C:\cygwin64\bin
	C:\cygwin64\bin
	C:\Program Files (x86)\AMD APP\bin\x86_64
	C:\Program Files (x86)\AMD APP\bin\x86
	C:\Windows\system32
	C:\Windows
	C:\Windows\System32\Wbem
	C:\Windows\System32\WindowsPowerShell\v1.0
	C:\Program Files\Microsoft SQL Server\110\Tools\Binn
	C:\Program Files (x86)\RTLSDR Scanner
	C:\Python27
	C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static
	C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit
	C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0
	C:\Program Files\Microsoft SQL Server\120\Tools\Binn
	C:\cygwin64\lib\lapack

Output from C:\cygwin64\bin\id.exe
UID: 1000(yano)                     GID: 513(None)
513(None)                           555(Remote Desktop Users)
545(Users)                          4(INTERACTIVE)
66049(コンソール ログオン) 11(Authenticated Users)
15(This Organization)               113(ローカル アカウント)
4095(CurrentSession)                66048(LOCAL)
262154(NTLM Authentication)         401408(Medium Mandatory Level)

SysDir: C:\Windows\system32
WinDir: C:\Windows

HOME = '/home/yano'
PWD = '/home/yano'
USER = 'yano'
MAKE_MODE = 'unix'

!:: = '::\'
ALLUSERSPROFILE = 'C:\ProgramData'
AMDAPPSDKROOT = 'C:\Program Files (x86)\AMD APP\'
APPDATA = 'C:\Users\yano\AppData\Roaming'
COMMONPROGRAMFILES = 'C:\Program Files\Common Files'
CommonProgramFiles(x86) = 'C:\Program Files (x86)\Common Files'
CommonProgramW6432 = 'C:\Program Files\Common Files'
COMPUTERNAME = 'EXPRESS5800-S70'
COMSPEC = 'C:\Windows\system32\cmd.exe'
FP_NO_HOST_CHECK = 'NO'
GNUPLOT_LIB = 'C:\Program Files (x86)\gnuplot\demo'
HOMEDRIVE = 'C:'
HOMEPATH = '\Users\yano'
LOCALAPPDATA = 'C:\Users\yano\AppData\Local'
LOGONSERVER = '\\EXPRESS5800-S70'
NUMBER_OF_PROCESSORS = '8'
OS = 'Windows_NT'
PATHEXT = '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC'
PROCESSOR_ARCHITECTURE = 'AMD64'
PROCESSOR_IDENTIFIER = 'Intel64 Family 6 Model 30 Stepping 5, GenuineIntel'
PROCESSOR_LEVEL = '6'
PROCESSOR_REVISION = '1e05'
ProgramData = 'C:\ProgramData'
PROGRAMFILES = 'C:\Program Files'
ProgramFiles(x86) = 'C:\Program Files (x86)'
ProgramW6432 = 'C:\Program Files'
PSModulePath = 'C:\Windows\system32\WindowsPowerShell\v1.0\Modules\'
PUBLIC = 'C:\Users\Public'
SESSIONNAME = 'Console'
SYSTEMDRIVE = 'C:'
SYSTEMROOT = 'C:\Windows'
USERDOMAIN = 'EXPRESS5800-S70'
USERNAME = 'yano'
USERPROFILE = 'C:\Users\yano'
VBOX_MSI_INSTALL_PATH = 'C:\Program Files\Oracle\VirtualBox\'
VS110COMNTOOLS = 'C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\'
VS120COMNTOOLS = 'C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\'
WINDIR = 'C:\Windows'
TERM = 'xterm'
LANG = 'ja_JP.UTF-8'
HOSTTYPE = 'x86_64-cygwin'
VENDOR = 'intel'
OSTYPE = 'cygwin'
MACHTYPE = 'x86_64'
SHLVL = '1'
LOGNAME = 'yano'
GROUP = 'None'
HOST = 'Express5800-S70'
REMOTEHOST = 'Express5800-S70'
TZ = 'Asia/Tokyo'
MANPATH = '/usr/share/man:'
SHELL = '/bin/tcsh'

HKEY_CURRENT_USER\Software\Cygwin
HKEY_CURRENT_USER\Software\Cygwin\Installations
  (default) = '\??\C:\cygwin64'
  0650610072c23a93 = '\??\C:\cygwin64\home\yano\bench'
  ae7473f640eb5816 = '\??\C:\cygwin64\home\yano'
  c5e39b7a9d22bafb = '\??\C:\cygwin'
HKEY_CURRENT_USER\Software\Cygwin\Program Options
HKEY_CURRENT_USER\Software\Cygwin\setup
HKEY_LOCAL_MACHINE\SOFTWARE\Cygwin
HKEY_LOCAL_MACHINE\SOFTWARE\Cygwin\Installations
  (default) = '\??\C:\cygwin64'
HKEY_LOCAL_MACHINE\SOFTWARE\Cygwin\Program Options
HKEY_LOCAL_MACHINE\SOFTWARE\Cygwin\setup
  (default) = 'C:\cygwin64'
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Cygwin
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Cygwin\Installations
  (default) = '\??\C:\cygwin'
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Cygwin\Program Options
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Cygwin\setup
  (default) = 'C:\cygwin'

obcaseinsensitive set to 1

Cygwin installations found in the registry:
  System: Key: e022582115c10879 Path: C:\cygwin64
  User:   Key: e022582115c10879 Path: C:\cygwin64
  User:   Key: 0650610072c23a93 Path: C:\cygwin64\home\yano\bench (ORPHANED)
  User:   Key: ae7473f640eb5816 Path: C:\cygwin64\home\yano (ORPHANED)
  User:   Key: c5e39b7a9d22bafb Path: C:\cygwin

c:  hd  NTFS    133514Mb  89% CP CS UN PA FC     
d:  cd             N/A    N/A                    

C:\cygwin64      /          system  binary,auto
C:/cygwin64/bin  /usr/bin   system  binary
C:/cygwin64/lib  /usr/lib   system  binary
cygdrive prefix  /cygdrive  user    binary,posix=0,auto

Found: C:\cygwin64\bin\awk
Found: C:\cygwin64\bin\awk
 -> C:\cygwin64\bin\gawk.exe
Found: C:\cygwin64\bin\bash.exe
Found: C:\cygwin64\bin\bash.exe
Found: C:\cygwin64\bin\cat.exe
Found: C:\cygwin64\bin\cat.exe
Found: C:\cygwin64\bin\cp.exe
Found: C:\cygwin64\bin\cp.exe
Found: C:\cygwin64\bin\cpp.exe
Found: C:\cygwin64\bin\cpp.exe
Not Found: crontab
Found: C:\cygwin64\bin\find.exe
Found: C:\cygwin64\bin\find.exe
Found: C:\Windows\system32\find.exe
Warning: C:\cygwin64\bin\find.exe hides C:\Windows\system32\find.exe
Found: C:\cygwin64\bin\gcc.exe
Found: C:\cygwin64\bin\gcc.exe
Not Found: gdb
Found: C:\cygwin64\bin\grep.exe
Found: C:\cygwin64\bin\grep.exe
Found: C:\cygwin64\bin\kill.exe
Found: C:\cygwin64\bin\kill.exe
Found: C:\cygwin64\bin\ld.exe
Found: C:\cygwin64\bin\ld.exe
Found: C:\cygwin64\bin\ls.exe
Found: C:\cygwin64\bin\ls.exe
Found: C:\cygwin64\bin\make.exe
Found: C:\cygwin64\bin\make.exe
Found: C:\cygwin64\bin\mv.exe
Found: C:\cygwin64\bin\mv.exe
Found: C:\cygwin64\bin\patch.exe
Found: C:\cygwin64\bin\patch.exe
Found: C:\cygwin64\bin\perl.exe
Found: C:\cygwin64\bin\perl.exe
Found: C:\cygwin64\bin\rm.exe
Found: C:\cygwin64\bin\rm.exe
Found: C:\cygwin64\bin\sed.exe
Found: C:\cygwin64\bin\sed.exe
Found: C:\cygwin64\bin\ssh.exe
Found: C:\cygwin64\bin\ssh.exe
Found: C:\cygwin64\bin\sh.exe
Found: C:\cygwin64\bin\sh.exe
Found: C:\cygwin64\bin\tar.exe
Found: C:\cygwin64\bin\tar.exe
Found: C:\cygwin64\bin\test.exe
Found: C:\cygwin64\bin\test.exe
Found: C:\cygwin64\bin\vi.exe
Found: C:\cygwin64\bin\vi.exe
Found: C:\cygwin64\bin\vim.exe
Found: C:\cygwin64\bin\vim.exe

   37k 2013/07/14 C:\cygwin64\bin\cygamd-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygamd-0.dll" v0.0 ts=2013-07-14 15:25
  575k 2013/05/30 C:\cygwin64\bin\cygarchive-13.dll - os=4.0 img=0.0 sys=5.2
                  "cygarchive-13.dll" v0.0 ts=2013-05-30 03:06
   38k 2013/07/19 C:\cygwin64\bin\cygargp-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygargp-0.dll" v0.0 ts=2013-07-19 15:07
  304k 2014/08/17 C:\cygwin64\bin\cygarpack-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygarpack-2.dll" v0.0 ts=2014-08-17 11:37
  510k 2014/03/20 C:\cygwin64\bin\cygasn1-8.dll - os=4.0 img=0.0 sys=5.2
                  "cygasn1-8.dll" v0.0 ts=2014-03-20 04:54
  116k 2015/01/11 C:\cygwin64\bin\cygatk-1.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygatk-1.0-0.dll" v0.0 ts=2015-01-11 20:13
  157k 2015/01/12 C:\cygwin64\bin\cygatk-bridge-2.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygatk-bridge-2.0-0.dll" v0.0 ts=2015-01-12 03:02
   88k 2015/01/29 C:\cygwin64\bin\cygatomic-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygatomic-1.dll" v0.0 ts=2015-01-29 07:28
  145k 2015/01/12 C:\cygwin64\bin\cygatspi-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygatspi-0.dll" v0.0 ts=2015-01-12 02:41
   16k 2013/03/26 C:\cygwin64\bin\cygattr-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygattr-1.dll" v0.0 ts=2013-03-26 18:26
   80k 2013/05/30 C:\cygwin64\bin\cygaudio-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygaudio-2.dll" v0.0 ts=2013-05-30 23:41
   59k 2013/06/04 C:\cygwin64\bin\cygavahi-client-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygavahi-client-3.dll" v0.0 ts=2013-06-04 05:29
   42k 2013/06/04 C:\cygwin64\bin\cygavahi-common-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygavahi-common-3.dll" v0.0 ts=2013-06-04 05:28
   13k 2013/06/04 C:\cygwin64\bin\cygavahi-glib-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygavahi-glib-1.dll" v0.0 ts=2013-06-04 05:29
  179k 2014/12/01 C:\cygwin64\bin\cygblkid-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygblkid-1.dll" v0.0 ts=2014-12-01 23:56
   64k 2013/03/07 C:\cygwin64\bin\cygbz2-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygbz2-1.dll" v0.0 ts=2013-03-07 02:54
 1064k 2015/01/12 C:\cygwin64\bin\cygcairo-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygcairo-2.dll" v0.0 ts=2015-01-12 02:54
   27k 2015/01/12 C:\cygwin64\bin\cygcairo-gobject-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygcairo-gobject-2.dll" v0.0 ts=2015-01-12 02:54
  118k 2015/01/12 C:\cygwin64\bin\cygcairo-script-interpreter-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygcairo-script-interpreter-2.dll" v0.0 ts=2015-01-12 02:54
   39k 2013/07/14 C:\cygwin64\bin\cygcamd-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygcamd-0.dll" v0.0 ts=2013-07-14 15:45
   13k 2013/03/06 C:\cygwin64\bin\cygcatgets1.dll - os=4.0 img=0.0 sys=5.2
                  "cygcatgets1.dll" v0.0 ts=2013-03-06 14:34
   39k 2013/07/14 C:\cygwin64\bin\cygccolamd-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygccolamd-0.dll" v0.0 ts=2013-07-14 15:54
   11k 2014/12/24 C:\cygwin64\bin\cygcharset-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygcharset-1.dll" v0.0 ts=2014-12-24 07:44
  873k 2013/07/14 C:\cygwin64\bin\cygcholmod-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygcholmod-0.dll" v0.0 ts=2013-07-14 17:37
  111k 2013/05/05 C:\cygwin64\bin\cygcloog-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygcloog-0.dll" v0.0 ts=2013-05-05 16:39
  117k 2013/05/05 C:\cygwin64\bin\cygcloog-isl-4.dll - os=4.0 img=0.0 sys=5.2
                  "cygcloog-isl-4.dll" v0.0 ts=2013-05-05 16:41
   27k 2013/07/14 C:\cygwin64\bin\cygcolamd-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygcolamd-0.dll" v0.0 ts=2013-07-14 15:32
   12k 2014/06/09 C:\cygwin64\bin\cygcom_err-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygcom_err-2.dll" v0.0 ts=1970-01-01 00:00
  203k 2013/04/21 C:\cygwin64\bin\cygcroco-0.6-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygcroco-0.6-3.dll" v0.0 ts=2013-04-21 06:25
    9k 2013/03/07 C:\cygwin64\bin\cygcrypt-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygcrypt-0.dll" v0.0 ts=2013-03-07 09:29
 1752k 2015/01/08 C:\cygwin64\bin\cygcrypto-1.0.0.dll - os=4.0 img=0.0 sys=5.2
                  "cygcrypto-1.0.0.dll" v0.0 ts=2015-01-08 20:02
  434k 2015/01/08 C:\cygwin64\bin\cygcurl-4.dll - os=4.0 img=0.0 sys=5.2
                  "cygcurl-4.dll" v0.0 ts=2015-01-08 21:12
  158k 2013/07/14 C:\cygwin64\bin\cygcxsparse-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygcxsparse-0.dll" v0.0 ts=2013-07-14 16:07
   24k 2014/11/12 C:\cygwin64\bin\cygdatrie-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygdatrie-1.dll" v0.0 ts=2014-11-12 07:24
 1526k 2013/03/08 C:\cygwin64\bin\cygdb-5.3.dll - os=4.0 img=0.0 sys=5.2
                  "cygdb-5.3.dll" v0.0 ts=2013-03-08 07:55
  242k 2015/02/17 C:\cygwin64\bin\cygdbus-1-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygdbus-1-3.dll" v0.0 ts=2015-02-17 19:16
  111k 2013/03/08 C:\cygwin64\bin\cygdb_cxx-5.3.dll - os=4.0 img=0.0 sys=5.2
                  "cygdb_cxx-5.3.dll" v0.0 ts=2013-03-08 07:56
  472k 2013/03/08 C:\cygwin64\bin\cygdb_sql-5.3.dll - os=4.0 img=0.0 sys=5.2
                  "cygdb_sql-5.3.dll" v0.0 ts=2013-03-08 07:58
  154k 2013/10/20 C:\cygwin64\bin\cygedit-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygedit-0.dll" v0.0 ts=2013-10-20 21:56
   68k 2015/01/13 C:\cygwin64\bin\cygEGL-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygEGL-1.dll" v0.0 ts=2015-01-13 10:00
  147k 2013/07/31 C:\cygwin64\bin\cygexpat-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygexpat-1.dll" v0.0 ts=2013-07-31 22:53
   30k 2014/10/14 C:\cygwin64\bin\cygfam-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygfam-0.dll" v0.0 ts=2014-10-14 21:33
   26k 2015/01/11 C:\cygwin64\bin\cygffi-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygffi-6.dll" v0.0 ts=2015-01-11 09:25
 1050k 2014/04/13 C:\cygwin64\bin\cygfftw3-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygfftw3-3.dll" v0.0 ts=1970-01-01 00:00
 1011k 2014/04/13 C:\cygwin64\bin\cygfftw3f-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygfftw3f-3.dll" v0.0 ts=1970-01-01 00:00
   25k 2014/04/13 C:\cygwin64\bin\cygfftw3f_threads-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygfftw3f_threads-3.dll" v0.0 ts=1970-01-01 00:00
   24k 2014/04/13 C:\cygwin64\bin\cygfftw3_threads-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygfftw3_threads-3.dll" v0.0 ts=1970-01-01 00:00
  959k 2013/09/10 C:\cygwin64\bin\cygfltk-1.3.dll - os=4.0 img=0.0 sys=5.2
                  "cygfltk-1.3.dll" v0.0 ts=2013-09-10 19:39
   21k 2013/09/10 C:\cygwin64\bin\cygfltk_forms-1.3.dll - os=4.0 img=0.0 sys=5.2
                  "cygfltk_forms-1.3.dll" v0.0 ts=2013-09-10 19:39
   90k 2013/09/10 C:\cygwin64\bin\cygfltk_gl-1.3.dll - os=4.0 img=0.0 sys=5.2
                  "cygfltk_gl-1.3.dll" v0.0 ts=2013-09-10 19:39
   47k 2013/09/10 C:\cygwin64\bin\cygfltk_images-1.3.dll - os=4.0 img=0.0 sys=5.2
                  "cygfltk_images-1.3.dll" v0.0 ts=2013-09-10 19:39
  217k 2015/01/02 C:\cygwin64\bin\cygfontconfig-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygfontconfig-1.dll" v0.0 ts=2015-01-02 03:41
   25k 2013/06/06 C:\cygwin64\bin\cygfontenc-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygfontenc-1.dll" v0.0 ts=2013-06-06 22:13
   55k 2014/12/30 C:\cygwin64\bin\cygformw-10.dll - os=4.0 img=0.0 sys=5.2
                  "cygformw-10.dll" v0.0 ts=2014-12-30 18:05
  585k 2015/01/26 C:\cygwin64\bin\cygfreetype-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygfreetype-6.dll" v0.0 ts=2015-01-26 17:15
   69k 2015/01/29 C:\cygwin64\bin\cyggcc_s-seh-1.dll - os=4.0 img=0.0 sys=5.2
                  "cyggcc_s-seh-1.dll" v0.0 ts=2015-01-29 05:58
  175k 2015/01/12 C:\cygwin64\bin\cyggck-1-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggck-1-0.dll" v0.0 ts=2015-01-12 06:36
  480k 2015/01/12 C:\cygwin64\bin\cyggcr-base-3-1.dll - os=4.0 img=0.0 sys=5.2
                  "cyggcr-base-3-1.dll" v0.0 ts=2015-01-12 06:36
  369k 2015/01/12 C:\cygwin64\bin\cyggcr-ui-3-1.dll - os=4.0 img=0.0 sys=5.2
                  "cyggcr-ui-3-1.dll" v0.0 ts=2015-01-12 06:37
  470k 2014/06/01 C:\cygwin64\bin\cyggcrypt-11.dll - os=4.0 img=0.0 sys=5.2
                  "cyggcrypt-11.dll" v0.0 ts=1970-01-01 00:00
   40k 2014/05/27 C:\cygwin64\bin\cyggdbm-4.dll - os=4.0 img=0.0 sys=5.2
                  "cyggdbm-4.dll" v0.0 ts=1970-01-01 00:00
   13k 2014/05/27 C:\cygwin64\bin\cyggdbm_compat-4.dll - os=4.0 img=0.0 sys=5.2
                  "cyggdbm_compat-4.dll" v0.0 ts=1970-01-01 00:00
  554k 2015/02/01 C:\cygwin64\bin\cyggdk-3-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggdk-3-0.dll" v0.0 ts=2015-02-01 11:55
  118k 2015/01/11 C:\cygwin64\bin\cyggdk_pixbuf-2.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggdk_pixbuf-2.0-0.dll" v0.0 ts=2015-01-11 20:31
  193k 2014/11/18 C:\cygwin64\bin\cyggettextlib-0-19-3.dll - os=4.0 img=0.0 sys=5.2
                  "cyggettextlib-0-19-3.dll" v0.0 ts=2014-11-18 07:06
  238k 2014/11/18 C:\cygwin64\bin\cyggettextsrc-0-19-3.dll - os=4.0 img=0.0 sys=5.2
                  "cyggettextsrc-0-19-3.dll" v0.0 ts=2014-11-18 07:07
 1140k 2015/01/29 C:\cygwin64\bin\cyggfortran-3.dll - os=4.0 img=0.0 sys=5.2
                  "cyggfortran-3.dll" v0.0 ts=2015-01-29 07:22
 1247k 2015/01/11 C:\cygwin64\bin\cyggio-2.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggio-2.0-0.dll" v0.0 ts=2015-01-11 19:42
  594k 2015/01/13 C:\cygwin64\bin\cygGL-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygGL-1.dll" v0.0 ts=2015-01-13 10:00
   77k 2015/02/11 C:\cygwin64\bin\cyggl2ps-1.dll - os=4.0 img=1.3 sys=5.2
                  "cyggl2ps-1.dll" v0.0 ts=2015-02-11 11:29
  250k 2015/01/13 C:\cygwin64\bin\cygglapi-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygglapi-0.dll" v0.0 ts=2015-01-13 09:53
  949k 2015/01/11 C:\cygwin64\bin\cygglib-2.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygglib-2.0-0.dll" v0.0 ts=2015-01-11 19:41
  885k 2013/03/14 C:\cygwin64\bin\cygglpk-33.dll - os=4.0 img=0.0 sys=5.2
                  "cygglpk-33.dll" v0.0 ts=2013-03-14 08:19
  901k 2013/10/03 C:\cygwin64\bin\cygglpk-35.dll - os=4.0 img=0.0 sys=5.2
                  "cygglpk-35.dll" v0.0 ts=2013-10-03 13:59
  896k 2014/08/24 C:\cygwin64\bin\cygglpk-36.dll - os=4.0 img=0.0 sys=5.2
                  "cygglpk-36.dll" v0.0 ts=2014-08-24 06:34
  477k 2013/04/09 C:\cygwin64\bin\cygGLU-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygGLU-1.dll" v0.0 ts=2013-04-09 07:56
   14k 2015/01/11 C:\cygwin64\bin\cyggmodule-2.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggmodule-2.0-0.dll" v0.0 ts=2015-01-11 19:41
  520k 2015/01/26 C:\cygwin64\bin\cyggmp-10.dll - os=4.0 img=0.0 sys=5.2
                  "cyggmp-10.dll" v0.0 ts=2015-01-26 16:08
   21k 2015/01/26 C:\cygwin64\bin\cyggmpxx-4.dll - os=4.0 img=0.0 sys=5.2
                  "cyggmpxx-4.dll" v0.0 ts=2015-01-26 16:08
  126k 2015/01/12 C:\cygwin64\bin\cyggnome-keyring-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggnome-keyring-0.dll" v0.0 ts=2015-01-12 02:39
  867k 2015/02/13 C:\cygwin64\bin\cyggnutls-28.dll - os=4.0 img=0.0 sys=5.2
                  "cyggnutls-28.dll" v0.0 ts=2015-02-13 13:46
   24k 2015/02/13 C:\cygwin64\bin\cyggnutls-openssl-27.dll - os=4.0 img=0.0 sys=5.2
                  "cyggnutls-openssl-27.dll" v0.0 ts=2015-02-13 13:46
   22k 2015/02/13 C:\cygwin64\bin\cyggnutls-xssl-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggnutls-xssl-0.dll" v0.0 ts=2015-02-13 13:46
   42k 2015/02/13 C:\cygwin64\bin\cyggnutlsxx-28.dll - os=4.0 img=0.0 sys=5.2
                  "cyggnutlsxx-28.dll" v0.0 ts=2015-02-13 13:46
  275k 2015/01/11 C:\cygwin64\bin\cyggobject-2.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggobject-2.0-0.dll" v0.0 ts=2015-01-11 19:41
   73k 2015/01/29 C:\cygwin64\bin\cyggomp-1.dll - os=4.0 img=0.0 sys=5.2
                  "cyggomp-1.dll" v0.0 ts=2015-01-29 06:14
   19k 2014/06/01 C:\cygwin64\bin\cyggpg-error-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggpg-error-0.dll" v0.0 ts=1970-01-01 00:00
  276k 2015/02/11 C:\cygwin64\bin\cygGraphicsMagick++-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygGraphicsMagick++-3.dll" v0.0 ts=2015-02-11 16:18
 2908k 2015/02/11 C:\cygwin64\bin\cygGraphicsMagick-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygGraphicsMagick-3.dll" v0.0 ts=2015-02-11 16:17
  146k 2015/02/11 C:\cygwin64\bin\cygGraphicsMagickWand-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygGraphicsMagickWand-2.dll" v0.0 ts=2015-02-11 16:18
  116k 2013/08/05 C:\cygwin64\bin\cyggraphite2-3.dll - os=4.0 img=3.0 sys=5.2
                  "cyggraphite2-3.dll" v0.0 ts=2013-08-05 07:33
11338k 2015/02/12 C:\cygwin64\bin\cyggs-9.dll - os=4.0 img=0.0 sys=5.2
                  "cyggs-9.dll" v0.0 ts=2015-02-12 15:41
  198k 2014/03/20 C:\cygwin64\bin\cyggssapi-3.dll - os=4.0 img=0.0 sys=5.2
                  "cyggssapi-3.dll" v0.0 ts=2014-03-20 06:15
  253k 2014/09/19 C:\cygwin64\bin\cyggssapi_krb5-2.dll - os=4.0 img=0.0 sys=5.2
                  "cyggssapi_krb5-2.dll" v0.0 ts=2014-09-19 18:42
    9k 2015/01/11 C:\cygwin64\bin\cyggthread-2.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggthread-2.0-0.dll" v0.0 ts=2015-01-11 19:41
 6274k 2015/02/01 C:\cygwin64\bin\cyggtk-3-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggtk-3-0.dll" v0.0 ts=2015-02-01 12:00
   17k 2015/02/01 C:\cygwin64\bin\cyggtkreftestprivate-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggtkreftestprivate-0.dll" v0.0 ts=2015-02-01 12:10
  691k 2013/04/22 C:\cygwin64\bin\cygguile-17.dll - os=4.0 img=0.0 sys=5.2
                  "cygguile-17.dll" v0.0 ts=2013-04-22 03:15
  181k 2015/01/12 C:\cygwin64\bin\cyggvfscommon.dll - os=4.0 img=0.0 sys=5.2
                  "cyggvfscommon.dll" v0.0 ts=2015-01-12 06:20
  121k 2015/01/12 C:\cygwin64\bin\cyggvfsdaemon.dll - os=4.0 img=0.0 sys=5.2
                  "cyggvfsdaemon.dll" v0.0 ts=2015-01-12 06:22
  332k 2015/01/12 C:\cygwin64\bin\cygharfbuzz-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygharfbuzz-0.dll" v0.0 ts=2015-01-12 02:33
 2510k 2014/06/03 C:\cygwin64\bin\cyghdf5-8.dll - os=4.0 img=0.0 sys=5.2
                  "cyghdf5-8.dll" v0.0 ts=1970-01-01 00:00
 2518k 2015/01/20 C:\cygwin64\bin\cyghdf5-9.dll - os=4.0 img=0.0 sys=5.2
                  "cyghdf5-9.dll" v0.0 ts=2015-01-20 10:26
  254k 2014/06/03 C:\cygwin64\bin\cyghdf5_cpp-8.dll - os=4.0 img=0.0 sys=5.2
                  "cyghdf5_cpp-8.dll" v0.0 ts=1970-01-01 00:00
  272k 2015/01/20 C:\cygwin64\bin\cyghdf5_cpp-9.dll - os=4.0 img=0.0 sys=5.2
                  "cyghdf5_cpp-9.dll" v0.0 ts=2015-01-20 10:32
  101k 2014/06/03 C:\cygwin64\bin\cyghdf5_hl-8.dll - os=4.0 img=0.0 sys=5.2
                  "cyghdf5_hl-8.dll" v0.0 ts=1970-01-01 00:00
  103k 2015/01/20 C:\cygwin64\bin\cyghdf5_hl-9.dll - os=4.0 img=0.0 sys=5.2
                  "cyghdf5_hl-9.dll" v0.0 ts=2015-01-20 10:32
   10k 2014/06/03 C:\cygwin64\bin\cyghdf5_hl_cpp-8.dll - os=4.0 img=0.0 sys=5.2
                  "cyghdf5_hl_cpp-8.dll" v0.0 ts=1970-01-01 00:00
   11k 2015/01/20 C:\cygwin64\bin\cyghdf5_hl_cpp-9.dll - os=4.0 img=0.0 sys=5.2
                  "cyghdf5_hl_cpp-9.dll" v0.0 ts=2015-01-20 10:33
   14k 2014/03/20 C:\cygwin64\bin\cygheimbase-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygheimbase-1.dll" v0.0 ts=2014-03-20 04:52
   24k 2014/03/20 C:\cygwin64\bin\cygheimntlm-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygheimntlm-0.dll" v0.0 ts=2014-03-20 06:13
   30k 2015/01/27 C:\cygwin64\bin\cyghistory7.dll - os=4.0 img=0.0 sys=5.2
                  "cyghistory7.dll" v0.0 ts=2015-01-27 03:51
  168k 2015/02/12 C:\cygwin64\bin\cyghogweed-2.dll - os=4.0 img=0.0 sys=5.2
                  "cyghogweed-2.dll" v0.0 ts=2015-02-12 17:27
  236k 2014/03/20 C:\cygwin64\bin\cyghx509-5.dll - os=4.0 img=0.0 sys=5.2
                  "cyghx509-5.dll" v0.0 ts=2014-03-20 04:55
   77k 2014/08/10 C:\cygwin64\bin\cygICE-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygICE-6.dll" v0.0 ts=1970-01-01 00:00
 1002k 2014/12/24 C:\cygwin64\bin\cygiconv-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygiconv-2.dll" v0.0 ts=2014-12-24 07:45
21806k 2013/06/25 C:\cygwin64\bin\cygicudata51.dll - os=4.0 img=0.0 sys=5.2
                  "cygicudata51.dll" v0.0 ts=2013-06-25 06:30
 1717k 2013/06/25 C:\cygwin64\bin\cygicui18n51.dll - os=4.0 img=0.0 sys=5.2
                  "cygicui18n51.dll" v0.0 ts=2013-06-25 06:28
   43k 2013/06/25 C:\cygwin64\bin\cygicuio51.dll - os=4.0 img=0.0 sys=5.2
                  "cygicuio51.dll" v0.0 ts=2013-06-25 06:30
  305k 2013/06/25 C:\cygwin64\bin\cygicule51.dll - os=4.0 img=0.0 sys=5.2
                  "cygicule51.dll" v0.0 ts=2013-06-25 06:28
   38k 2013/06/25 C:\cygwin64\bin\cygiculx51.dll - os=4.0 img=0.0 sys=5.2
                  "cygiculx51.dll" v0.0 ts=2013-06-25 06:28
 1231k 2013/06/25 C:\cygwin64\bin\cygicuuc51.dll - os=4.0 img=0.0 sys=5.2
                  "cygicuuc51.dll" v0.0 ts=2013-06-25 06:27
  196k 2014/12/06 C:\cygwin64\bin\cygidn-11.dll - os=4.0 img=0.0 sys=5.2
                  "cygidn-11.dll" v0.0 ts=2014-12-06 13:17
   39k 2014/11/18 C:\cygwin64\bin\cygintl-8.dll - os=4.0 img=0.0 sys=5.2
                  "cygintl-8.dll" v0.0 ts=2014-11-18 07:04
  888k 2013/05/05 C:\cygwin64\bin\cygisl-10.dll - os=4.0 img=0.0 sys=5.2
                  "cygisl-10.dll" v0.0 ts=2013-05-05 16:36
  272k 2015/01/23 C:\cygwin64\bin\cygjasper-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygjasper-1.dll" v0.0 ts=2015-01-23 18:01
   48k 2014/06/17 C:\cygwin64\bin\cygjbig-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygjbig-2.dll" v0.0 ts=1970-01-01 00:00
   18k 2014/06/17 C:\cygwin64\bin\cygjbig85-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygjbig85-2.dll" v0.0 ts=1970-01-01 00:00
  255k 2014/12/29 C:\cygwin64\bin\cygjpeg-8.dll - os=4.0 img=0.0 sys=5.2
                  "cygjpeg-8.dll" v0.0 ts=2014-12-29 21:07
  128k 2015/01/12 C:\cygwin64\bin\cygjson-glib-1.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygjson-glib-1.0-0.dll" v0.0 ts=2015-01-12 02:33
  179k 2014/09/19 C:\cygwin64\bin\cygk5crypto-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygk5crypto-3.dll" v0.0 ts=2014-09-19 18:41
   23k 2014/03/20 C:\cygwin64\bin\cygkafs-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygkafs-0.dll" v0.0 ts=2014-03-20 06:13
  403k 2014/03/20 C:\cygwin64\bin\cygkrb5-26.dll - os=4.0 img=0.0 sys=5.2
                  "cygkrb5-26.dll" v0.0 ts=2014-03-20 06:12
  701k 2014/09/19 C:\cygwin64\bin\cygkrb5-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygkrb5-3.dll" v0.0 ts=2014-09-19 18:42
   35k 2014/09/19 C:\cygwin64\bin\cygkrb5support-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygkrb5support-0.dll" v0.0 ts=2014-09-19 18:41
   45k 2015/02/19 C:\cygwin64\bin\cyglber-2-4-2.dll - os=4.0 img=0.0 sys=5.2
                  "cyglber-2-4-2.dll" v0.0 ts=2015-02-19 14:39
  189k 2015/02/19 C:\cygwin64\bin\cyglcms-1.dll - os=4.0 img=0.0 sys=5.2
                  "cyglcms-1.dll" v0.0 ts=2015-02-19 12:08
  293k 2014/11/14 C:\cygwin64\bin\cyglcms2-2.dll - os=4.0 img=0.0 sys=5.2
                  "cyglcms2-2.dll" v0.0 ts=2014-11-14 12:24
  246k 2015/02/19 C:\cygwin64\bin\cygldap-2-4-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygldap-2-4-2.dll" v0.0 ts=2015-02-19 14:40
  261k 2015/02/19 C:\cygwin64\bin\cygldap_r-2-4-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygldap_r-2-4-2.dll" v0.0 ts=2015-02-19 14:41
17466k 2015/02/08 C:\cygwin64\bin\cygLLVM-3.4.dll - os=4.0 img=0.0 sys=5.2
                  "cygLLVM-3.4.dll" v0.0 ts=2015-02-08 17:48
    6k 2015/02/04 C:\cygwin64\bin\cyglsa64.dll - os=4.0 img=0.0 sys=5.2
                  "cyglsa64.dll" v0.0 ts=1970-01-01 00:00
   35k 2015/02/17 C:\cygwin64\bin\cygltdl-7.dll - os=4.0 img=0.0 sys=5.2
                  "cygltdl-7.dll" v0.0 ts=2015-02-17 18:26
  128k 2015/01/15 C:\cygwin64\bin\cyglzma-5.dll - os=4.0 img=0.0 sys=5.2
                  "cyglzma-5.dll" v0.0 ts=2015-01-15 20:11
  126k 2014/11/17 C:\cygwin64\bin\cyglzo2-2.dll - os=4.0 img=0.0 sys=5.2
                  "cyglzo2-2.dll" v0.0 ts=2014-11-17 11:24
  113k 2015/02/18 C:\cygwin64\bin\cygmagic-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygmagic-1.dll" v0.0 ts=2015-02-18 10:55
  158k 2014/08/12 C:\cygwin64\bin\cygman-2-6-7.dll - os=4.0 img=0.0 sys=5.2
                  "cygman-2-6-7.dll" v0.0 ts=1970-01-01 00:00
   29k 2014/12/30 C:\cygwin64\bin\cygmenuw-10.dll - os=4.0 img=0.0 sys=5.2
                  "cygmenuw-10.dll" v0.0 ts=2014-12-30 18:05
  347k 2013/07/14 C:\cygwin64\bin\cygmetis-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygmetis-0.dll" v0.0 ts=2013-07-14 13:12
  370k 2013/05/02 C:\cygwin64\bin\cygmng-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygmng-1.dll" v0.0 ts=2013-05-02 12:20
   89k 2015/01/26 C:\cygwin64\bin\cygmpc-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygmpc-3.dll" v0.0 ts=2015-01-26 16:28
  334k 2015/01/26 C:\cygwin64\bin\cygmpfr-4.dll - os=4.0 img=0.0 sys=5.2
                  "cygmpfr-4.dll" v0.0 ts=2015-01-26 16:14
   52k 2014/12/30 C:\cygwin64\bin\cygncurses++w-10.dll - os=4.0 img=0.0 sys=5.2
                  "cygncurses++w-10.dll" v0.0 ts=2014-12-30 18:10
  296k 2014/12/30 C:\cygwin64\bin\cygncursesw-10.dll - os=4.0 img=0.0 sys=5.2
                  "cygncursesw-10.dll" v0.0 ts=2014-12-30 18:04
  185k 2015/02/12 C:\cygwin64\bin\cygnettle-4.dll - os=4.0 img=0.0 sys=5.2
                  "cygnettle-4.dll" v0.0 ts=2015-02-12 17:27
14987k 2014/08/17 C:\cygwin64\bin\cygoctave-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygoctave-2.dll" v0.0 ts=2014-08-17 13:21
 1203k 2014/08/17 C:\cygwin64\bin\cygoctgui-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygoctgui-0.dll" v0.0 ts=2014-08-17 13:56
12337k 2014/08/17 C:\cygwin64\bin\cygoctinterp-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygoctinterp-2.dll" v0.0 ts=2014-08-17 13:49
   30k 2015/01/13 C:\cygwin64\bin\cygOpenVG-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygOpenVG-1.dll" v0.0 ts=2015-01-13 09:53
  220k 2014/10/19 C:\cygwin64\bin\cygp11-kit-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygp11-kit-0.dll" v0.0 ts=2014-10-19 14:36
   14k 2014/12/30 C:\cygwin64\bin\cygpanelw-10.dll - os=4.0 img=0.0 sys=5.2
                  "cygpanelw-10.dll" v0.0 ts=2014-12-30 18:05
  258k 2015/01/12 C:\cygwin64\bin\cygpango-1.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygpango-1.0-0.dll" v0.0 ts=2015-01-12 02:40
   42k 2015/01/12 C:\cygwin64\bin\cygpangocairo-1.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygpangocairo-1.0-0.dll" v0.0 ts=2015-01-12 02:41
   70k 2015/01/12 C:\cygwin64\bin\cygpangoft2-1.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygpangoft2-1.0-0.dll" v0.0 ts=2015-01-12 02:40
   28k 2015/01/12 C:\cygwin64\bin\cygpangoxft-1.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygpangoxft-1.0-0.dll" v0.0 ts=2015-01-12 02:40
   11k 2013/07/23 C:\cygwin64\bin\cygpaper-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygpaper-1.dll" v0.0 ts=2013-07-23 05:40
  280k 2014/12/08 C:\cygwin64\bin\cygpcre-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygpcre-1.dll" v0.0 ts=2014-12-08 23:50
 1580k 2013/03/11 C:\cygwin64\bin\cygperl5_14.dll - os=4.0 img=0.0 sys=5.2
                  "cygperl5_14.dll" v0.0 ts=2013-03-12 00:25
 5790k 2015/01/27 C:\cygwin64\bin\cygphp5-5-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygphp5-5-6.dll" v0.0 ts=2015-01-27 20:47
   38k 2014/05/12 C:\cygwin64\bin\cygpipeline-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygpipeline-1.dll" v0.0 ts=1970-01-01 00:00
  654k 2014/11/16 C:\cygwin64\bin\cygpixman-1-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygpixman-1-0.dll" v0.0 ts=2014-11-16 22:16
  148k 2014/12/31 C:\cygwin64\bin\cygpng15-15.dll - os=4.0 img=0.0 sys=5.2
                  "cygpng15-15.dll" v0.0 ts=2014-12-31 20:50
  177k 2014/12/31 C:\cygwin64\bin\cygpng16-16.dll - os=4.0 img=0.0 sys=5.2
                  "cygpng16-16.dll" v0.0 ts=2014-12-31 09:51
   41k 2013/10/21 C:\cygwin64\bin\cygpopt-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygpopt-0.dll" v0.0 ts=2013-10-21 21:52
  844k 2013/05/05 C:\cygwin64\bin\cygppl-9.dll - os=4.0 img=0.0 sys=5.2
                  "cygppl-9.dll" v0.0 ts=2013-05-05 13:53
 2956k 2013/05/05 C:\cygwin64\bin\cygppl_c-4.dll - os=4.0 img=0.0 sys=5.2
                  "cygppl_c-4.dll" v0.0 ts=2013-05-05 13:54
  122k 2013/04/21 C:\cygwin64\bin\cygproxy-1.dll - os=4.0 img=1.0 sys=5.2
                  "cygproxy-1.dll" v0.0 ts=2013-04-21 10:24
   15k 2013/05/05 C:\cygwin64\bin\cygpwl-5.dll - os=4.0 img=0.0 sys=5.2
                  "cygpwl-5.dll" v0.0 ts=2013-05-05 13:53
  310k 2013/03/18 C:\cygwin64\bin\cygqhull-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygqhull-6.dll" v0.0 ts=2013-03-18 10:56
  319k 2013/03/18 C:\cygwin64\bin\cygqhull_p-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygqhull_p-6.dll" v0.0 ts=2013-03-18 10:56
   95k 2013/04/10 C:\cygwin64\bin\cygqrupdate-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygqrupdate-0.dll" v0.0 ts=2013-04-10 20:26
 2737k 2014/10/30 C:\cygwin64\bin\cygqscintilla2-11.dll - os=4.0 img=0.0 sys=5.2
                  "cygqscintilla2-11.dll" v0.0 ts=2014-10-30 08:42
 2696k 2015/01/06 C:\cygwin64\bin\cygQtCore-4.dll - os=4.0 img=0.0 sys=5.2
                  "cygQtCore-4.dll" v0.0 ts=2015-01-06 09:18
 9969k 2015/01/06 C:\cygwin64\bin\cygQtGui-4.dll - os=4.0 img=0.0 sys=5.2
                  "cygQtGui-4.dll" v0.0 ts=2015-01-06 09:26
 1243k 2015/01/06 C:\cygwin64\bin\cygQtNetwork-4.dll - os=4.0 img=0.0 sys=5.2
                  "cygQtNetwork-4.dll" v0.0 ts=2015-01-06 09:19
  305k 2015/01/29 C:\cygwin64\bin\cygquadmath-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygquadmath-0.dll" v0.0 ts=2015-01-29 06:58
  207k 2015/01/27 C:\cygwin64\bin\cygreadline7.dll - os=4.0 img=0.0 sys=5.2
                  "cygreadline7.dll" v0.0 ts=2015-01-27 03:51
   72k 2015/01/12 C:\cygwin64\bin\cygrest-0.7-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygrest-0.7-0.dll" v0.0 ts=2015-01-12 02:43
   28k 2015/01/12 C:\cygwin64\bin\cygrest-extras-0.7-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygrest-extras-0.7-0.dll" v0.0 ts=2015-01-12 02:44
   57k 2014/03/20 C:\cygwin64\bin\cygroken-18.dll - os=4.0 img=0.0 sys=5.2
                  "cygroken-18.dll" v0.0 ts=2014-03-20 04:53
  205k 2015/02/18 C:\cygwin64\bin\cygrsvg-2-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygrsvg-2-2.dll" v0.0 ts=2015-02-18 05:47
   97k 2014/11/24 C:\cygwin64\bin\cygsasl2-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygsasl2-3.dll" v0.0 ts=2014-11-24 18:22
  249k 2015/01/12 C:\cygwin64\bin\cygsecret-1-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygsecret-1-0.dll" v0.0 ts=2015-01-12 02:14
   28k 2014/01/14 C:\cygwin64\bin\cygSM-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygSM-6.dll" v0.0 ts=2014-01-14 23:23
   88k 2014/12/01 C:\cygwin64\bin\cygsmartcols-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygsmartcols-1.dll" v0.0 ts=2014-12-01 23:56
  584k 2015/01/12 C:\cygwin64\bin\cygsoup-2.4-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygsoup-2.4-1.dll" v0.0 ts=2015-01-12 02:32
   11k 2015/01/12 C:\cygwin64\bin\cygsoup-gnome-2.4-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygsoup-gnome-2.4-1.dll" v0.0 ts=2015-01-12 02:32
  750k 2015/01/30 C:\cygwin64\bin\cygsqlite3-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygsqlite3-0.dll" v0.0 ts=2015-01-30 23:25
  142k 2014/11/09 C:\cygwin64\bin\cygssh2-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygssh2-1.dll" v0.0 ts=2014-11-09 21:20
  382k 2015/01/08 C:\cygwin64\bin\cygssl-1.0.0.dll - os=4.0 img=0.0 sys=5.2
                  "cygssl-1.0.0.dll" v0.0 ts=2015-01-08 20:02
   12k 2015/01/29 C:\cygwin64\bin\cygssp-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygssp-0.dll" v0.0 ts=2015-01-29 06:53
  941k 2015/01/29 C:\cygwin64\bin\cygstdc++-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygstdc++-6.dll" v0.0 ts=2015-01-29 06:13
    8k 2013/07/14 C:\cygwin64\bin\cygsuitesparseconfig-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygsuitesparseconfig-0.dll" v0.0 ts=2013-07-14 15:16
   64k 2014/11/13 C:\cygwin64\bin\cygtasn1-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygtasn1-6.dll" v0.0 ts=2014-11-13 18:20
   32k 2014/11/12 C:\cygwin64\bin\cygthai-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygthai-0.dll" v0.0 ts=2014-11-12 16:31
   52k 2014/12/30 C:\cygwin64\bin\cygticw-10.dll - os=4.0 img=0.0 sys=5.2
                  "cygticw-10.dll" v0.0 ts=2014-12-30 18:04
  363k 2014/05/15 C:\cygwin64\bin\cygtiff-5.dll - os=4.0 img=0.0 sys=5.2
                  "cygtiff-5.dll" v0.0 ts=1970-01-01 00:00
  415k 2014/05/30 C:\cygwin64\bin\cygtiff-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygtiff-6.dll" v0.0 ts=1970-01-01 00:00
   12k 2014/05/15 C:\cygwin64\bin\cygtiffxx-5.dll - os=4.0 img=0.0 sys=5.2
                  "cygtiffxx-5.dll" v0.0 ts=1970-01-01 00:00
   12k 2014/05/30 C:\cygwin64\bin\cygtiffxx-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygtiffxx-6.dll" v0.0 ts=1970-01-01 00:00
  677k 2013/07/14 C:\cygwin64\bin\cygumfpack-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygumfpack-0.dll" v0.0 ts=2013-07-14 21:49
 1252k 2014/09/04 C:\cygwin64\bin\cygunistring-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygunistring-2.dll" v0.0 ts=2014-09-04 21:06
   15k 2014/12/01 C:\cygwin64\bin\cyguuid-1.dll - os=4.0 img=0.0 sys=5.2
                  "cyguuid-1.dll" v0.0 ts=2014-12-01 23:56
  340k 2015/01/02 C:\cygwin64\bin\cygwebp-5.dll - os=4.0 img=0.0 sys=5.2
                  "cygwebp-5.dll" v0.0 ts=2015-01-02 01:50
  161k 2014/03/20 C:\cygwin64\bin\cygwind-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygwind-0.dll" v0.0 ts=2014-03-20 04:53
  312k 2015/02/12 C:\cygwin64\bin\cygwmf-0-2-7.dll - os=4.0 img=0.0 sys=5.2
                  "cygwmf-0-2-7.dll" v0.0 ts=2015-02-12 15:13
  102k 2015/02/12 C:\cygwin64\bin\cygwmflite-0-2-7.dll - os=4.0 img=0.0 sys=5.2
                  "cygwmflite-0-2-7.dll" v0.0 ts=2015-02-12 15:13
   30k 2013/11/15 C:\cygwin64\bin\cygwrap-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygwrap-0.dll" v0.0 ts=2013-11-15 19:58
 1121k 2014/10/21 C:\cygwin64\bin\cygX11-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygX11-6.dll" v0.0 ts=2014-10-21 02:59
    9k 2014/10/21 C:\cygwin64\bin\cygX11-xcb-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygX11-xcb-1.dll" v0.0 ts=2014-10-21 02:59
   12k 2013/06/06 C:\cygwin64\bin\cygXau-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygXau-6.dll" v0.0 ts=2013-06-06 06:23
  102k 2014/05/20 C:\cygwin64\bin\cygxcb-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygxcb-1.dll" v0.0 ts=1970-01-01 00:00
   71k 2014/05/20 C:\cygwin64\bin\cygxcb-glx-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygxcb-glx-0.dll" v0.0 ts=1970-01-01 00:00
   32k 2014/05/20 C:\cygwin64\bin\cygxcb-render-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygxcb-render-0.dll" v0.0 ts=1970-01-01 00:00
   13k 2014/05/20 C:\cygwin64\bin\cygxcb-shm-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygxcb-shm-0.dll" v0.0 ts=1970-01-01 00:00
   11k 2013/03/18 C:\cygwin64\bin\cygXcomposite-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygXcomposite-1.dll" v0.0 ts=2013-03-18 23:05
   34k 2013/06/06 C:\cygwin64\bin\cygXcursor-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygXcursor-1.dll" v0.0 ts=2013-06-06 21:15
   10k 2013/04/08 C:\cygwin64\bin\cygXdamage-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygXdamage-1.dll" v0.0 ts=2013-04-08 22:24
   21k 2013/03/13 C:\cygwin64\bin\cygXdmcp-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygXdmcp-6.dll" v0.0 ts=2013-03-13 04:58
   56k 2014/08/10 C:\cygwin64\bin\cygXext-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygXext-6.dll" v0.0 ts=1970-01-01 00:00
   19k 2013/06/06 C:\cygwin64\bin\cygXfixes-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygXfixes-3.dll" v0.0 ts=2013-06-06 20:27
   73k 2014/08/10 C:\cygwin64\bin\cygXft-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygXft-2.dll" v0.0 ts=1970-01-01 00:00
   56k 2014/08/10 C:\cygwin64\bin\cygXi-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygXi-6.dll" v0.0 ts=1970-01-01 00:00
   10k 2013/06/06 C:\cygwin64\bin\cygXinerama-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygXinerama-1.dll" v0.0 ts=2013-06-06 21:33
 1207k 2014/10/19 C:\cygwin64\bin\cygxml2-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygxml2-2.dll" v0.0 ts=2014-10-19 08:52
   34k 2014/01/14 C:\cygwin64\bin\cygXrandr-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygXrandr-2.dll" v0.0 ts=2014-01-14 23:56
   35k 2013/06/14 C:\cygwin64\bin\cygXrender-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygXrender-1.dll" v0.0 ts=2013-06-14 09:29
   12k 2013/03/14 C:\cygwin64\bin\cygXss-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygXss-1.dll" v0.0 ts=2013-03-14 04:07
  320k 2014/08/10 C:\cygwin64\bin\cygXt-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygXt-6.dll" v0.0 ts=1970-01-01 00:00
   21k 2013/06/06 C:\cygwin64\bin\cygXtst-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygXtst-6.dll" v0.0 ts=2013-06-06 20:36
   80k 2014/11/19 C:\cygwin64\bin\cygz.dll - os=4.0 img=0.0 sys=5.2
                  "cygz.dll" v0.0 ts=2014-11-19 23:08
 3182k 2015/02/04 C:\cygwin64\bin\cygwin1.dll - os=4.0 img=0.0 sys=5.2
                  "cygwin1.dll" v0.0 ts=1970-01-01 00:00
    Cygwin DLL version info:
        DLL version: 1.7.34
        DLL epoch: 19
        DLL old termios: 5
        DLL malloc env: 28
        Cygwin conv: 181
        API major: 0
        API minor: 285
        Shared data: 5
        DLL identifier: cygwin1
        Mount registry: 3
        Cygwin registry name: Cygwin
        Installations name: Installations
        Cygdrive default prefix: 
        Build date: 
        Shared id: cygwin1S5

   37k 2013/07/14 C:\cygwin64\bin\cygamd-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygamd-0.dll" v0.0 ts=2013-07-14 15:25
  575k 2013/05/30 C:\cygwin64\bin\cygarchive-13.dll - os=4.0 img=0.0 sys=5.2
                  "cygarchive-13.dll" v0.0 ts=2013-05-30 03:06
   38k 2013/07/19 C:\cygwin64\bin\cygargp-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygargp-0.dll" v0.0 ts=2013-07-19 15:07
  304k 2014/08/17 C:\cygwin64\bin\cygarpack-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygarpack-2.dll" v0.0 ts=2014-08-17 11:37
  510k 2014/03/20 C:\cygwin64\bin\cygasn1-8.dll - os=4.0 img=0.0 sys=5.2
                  "cygasn1-8.dll" v0.0 ts=2014-03-20 04:54
  116k 2015/01/11 C:\cygwin64\bin\cygatk-1.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygatk-1.0-0.dll" v0.0 ts=2015-01-11 20:13
  157k 2015/01/12 C:\cygwin64\bin\cygatk-bridge-2.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygatk-bridge-2.0-0.dll" v0.0 ts=2015-01-12 03:02
   88k 2015/01/29 C:\cygwin64\bin\cygatomic-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygatomic-1.dll" v0.0 ts=2015-01-29 07:28
  145k 2015/01/12 C:\cygwin64\bin\cygatspi-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygatspi-0.dll" v0.0 ts=2015-01-12 02:41
   16k 2013/03/26 C:\cygwin64\bin\cygattr-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygattr-1.dll" v0.0 ts=2013-03-26 18:26
   80k 2013/05/30 C:\cygwin64\bin\cygaudio-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygaudio-2.dll" v0.0 ts=2013-05-30 23:41
   59k 2013/06/04 C:\cygwin64\bin\cygavahi-client-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygavahi-client-3.dll" v0.0 ts=2013-06-04 05:29
   42k 2013/06/04 C:\cygwin64\bin\cygavahi-common-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygavahi-common-3.dll" v0.0 ts=2013-06-04 05:28
   13k 2013/06/04 C:\cygwin64\bin\cygavahi-glib-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygavahi-glib-1.dll" v0.0 ts=2013-06-04 05:29
  179k 2014/12/01 C:\cygwin64\bin\cygblkid-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygblkid-1.dll" v0.0 ts=2014-12-01 23:56
   64k 2013/03/07 C:\cygwin64\bin\cygbz2-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygbz2-1.dll" v0.0 ts=2013-03-07 02:54
 1064k 2015/01/12 C:\cygwin64\bin\cygcairo-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygcairo-2.dll" v0.0 ts=2015-01-12 02:54
   27k 2015/01/12 C:\cygwin64\bin\cygcairo-gobject-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygcairo-gobject-2.dll" v0.0 ts=2015-01-12 02:54
  118k 2015/01/12 C:\cygwin64\bin\cygcairo-script-interpreter-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygcairo-script-interpreter-2.dll" v0.0 ts=2015-01-12 02:54
   39k 2013/07/14 C:\cygwin64\bin\cygcamd-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygcamd-0.dll" v0.0 ts=2013-07-14 15:45
   13k 2013/03/06 C:\cygwin64\bin\cygcatgets1.dll - os=4.0 img=0.0 sys=5.2
                  "cygcatgets1.dll" v0.0 ts=2013-03-06 14:34
   39k 2013/07/14 C:\cygwin64\bin\cygccolamd-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygccolamd-0.dll" v0.0 ts=2013-07-14 15:54
   11k 2014/12/24 C:\cygwin64\bin\cygcharset-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygcharset-1.dll" v0.0 ts=2014-12-24 07:44
  873k 2013/07/14 C:\cygwin64\bin\cygcholmod-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygcholmod-0.dll" v0.0 ts=2013-07-14 17:37
  111k 2013/05/05 C:\cygwin64\bin\cygcloog-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygcloog-0.dll" v0.0 ts=2013-05-05 16:39
  117k 2013/05/05 C:\cygwin64\bin\cygcloog-isl-4.dll - os=4.0 img=0.0 sys=5.2
                  "cygcloog-isl-4.dll" v0.0 ts=2013-05-05 16:41
   27k 2013/07/14 C:\cygwin64\bin\cygcolamd-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygcolamd-0.dll" v0.0 ts=2013-07-14 15:32
   12k 2014/06/09 C:\cygwin64\bin\cygcom_err-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygcom_err-2.dll" v0.0 ts=1970-01-01 00:00
  203k 2013/04/21 C:\cygwin64\bin\cygcroco-0.6-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygcroco-0.6-3.dll" v0.0 ts=2013-04-21 06:25
    9k 2013/03/07 C:\cygwin64\bin\cygcrypt-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygcrypt-0.dll" v0.0 ts=2013-03-07 09:29
 1752k 2015/01/08 C:\cygwin64\bin\cygcrypto-1.0.0.dll - os=4.0 img=0.0 sys=5.2
                  "cygcrypto-1.0.0.dll" v0.0 ts=2015-01-08 20:02
  434k 2015/01/08 C:\cygwin64\bin\cygcurl-4.dll - os=4.0 img=0.0 sys=5.2
                  "cygcurl-4.dll" v0.0 ts=2015-01-08 21:12
  158k 2013/07/14 C:\cygwin64\bin\cygcxsparse-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygcxsparse-0.dll" v0.0 ts=2013-07-14 16:07
   24k 2014/11/12 C:\cygwin64\bin\cygdatrie-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygdatrie-1.dll" v0.0 ts=2014-11-12 07:24
 1526k 2013/03/08 C:\cygwin64\bin\cygdb-5.3.dll - os=4.0 img=0.0 sys=5.2
                  "cygdb-5.3.dll" v0.0 ts=2013-03-08 07:55
  242k 2015/02/17 C:\cygwin64\bin\cygdbus-1-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygdbus-1-3.dll" v0.0 ts=2015-02-17 19:16
  111k 2013/03/08 C:\cygwin64\bin\cygdb_cxx-5.3.dll - os=4.0 img=0.0 sys=5.2
                  "cygdb_cxx-5.3.dll" v0.0 ts=2013-03-08 07:56
  472k 2013/03/08 C:\cygwin64\bin\cygdb_sql-5.3.dll - os=4.0 img=0.0 sys=5.2
                  "cygdb_sql-5.3.dll" v0.0 ts=2013-03-08 07:58
  154k 2013/10/20 C:\cygwin64\bin\cygedit-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygedit-0.dll" v0.0 ts=2013-10-20 21:56
   68k 2015/01/13 C:\cygwin64\bin\cygEGL-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygEGL-1.dll" v0.0 ts=2015-01-13 10:00
  147k 2013/07/31 C:\cygwin64\bin\cygexpat-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygexpat-1.dll" v0.0 ts=2013-07-31 22:53
   30k 2014/10/14 C:\cygwin64\bin\cygfam-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygfam-0.dll" v0.0 ts=2014-10-14 21:33
   26k 2015/01/11 C:\cygwin64\bin\cygffi-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygffi-6.dll" v0.0 ts=2015-01-11 09:25
 1050k 2014/04/13 C:\cygwin64\bin\cygfftw3-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygfftw3-3.dll" v0.0 ts=1970-01-01 00:00
 1011k 2014/04/13 C:\cygwin64\bin\cygfftw3f-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygfftw3f-3.dll" v0.0 ts=1970-01-01 00:00
   25k 2014/04/13 C:\cygwin64\bin\cygfftw3f_threads-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygfftw3f_threads-3.dll" v0.0 ts=1970-01-01 00:00
   24k 2014/04/13 C:\cygwin64\bin\cygfftw3_threads-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygfftw3_threads-3.dll" v0.0 ts=1970-01-01 00:00
  959k 2013/09/10 C:\cygwin64\bin\cygfltk-1.3.dll - os=4.0 img=0.0 sys=5.2
                  "cygfltk-1.3.dll" v0.0 ts=2013-09-10 19:39
   21k 2013/09/10 C:\cygwin64\bin\cygfltk_forms-1.3.dll - os=4.0 img=0.0 sys=5.2
                  "cygfltk_forms-1.3.dll" v0.0 ts=2013-09-10 19:39
   90k 2013/09/10 C:\cygwin64\bin\cygfltk_gl-1.3.dll - os=4.0 img=0.0 sys=5.2
                  "cygfltk_gl-1.3.dll" v0.0 ts=2013-09-10 19:39
   47k 2013/09/10 C:\cygwin64\bin\cygfltk_images-1.3.dll - os=4.0 img=0.0 sys=5.2
                  "cygfltk_images-1.3.dll" v0.0 ts=2013-09-10 19:39
  217k 2015/01/02 C:\cygwin64\bin\cygfontconfig-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygfontconfig-1.dll" v0.0 ts=2015-01-02 03:41
   25k 2013/06/06 C:\cygwin64\bin\cygfontenc-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygfontenc-1.dll" v0.0 ts=2013-06-06 22:13
   55k 2014/12/30 C:\cygwin64\bin\cygformw-10.dll - os=4.0 img=0.0 sys=5.2
                  "cygformw-10.dll" v0.0 ts=2014-12-30 18:05
  585k 2015/01/26 C:\cygwin64\bin\cygfreetype-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygfreetype-6.dll" v0.0 ts=2015-01-26 17:15
   69k 2015/01/29 C:\cygwin64\bin\cyggcc_s-seh-1.dll - os=4.0 img=0.0 sys=5.2
                  "cyggcc_s-seh-1.dll" v0.0 ts=2015-01-29 05:58
  175k 2015/01/12 C:\cygwin64\bin\cyggck-1-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggck-1-0.dll" v0.0 ts=2015-01-12 06:36
  480k 2015/01/12 C:\cygwin64\bin\cyggcr-base-3-1.dll - os=4.0 img=0.0 sys=5.2
                  "cyggcr-base-3-1.dll" v0.0 ts=2015-01-12 06:36
  369k 2015/01/12 C:\cygwin64\bin\cyggcr-ui-3-1.dll - os=4.0 img=0.0 sys=5.2
                  "cyggcr-ui-3-1.dll" v0.0 ts=2015-01-12 06:37
  470k 2014/06/01 C:\cygwin64\bin\cyggcrypt-11.dll - os=4.0 img=0.0 sys=5.2
                  "cyggcrypt-11.dll" v0.0 ts=1970-01-01 00:00
   40k 2014/05/27 C:\cygwin64\bin\cyggdbm-4.dll - os=4.0 img=0.0 sys=5.2
                  "cyggdbm-4.dll" v0.0 ts=1970-01-01 00:00
   13k 2014/05/27 C:\cygwin64\bin\cyggdbm_compat-4.dll - os=4.0 img=0.0 sys=5.2
                  "cyggdbm_compat-4.dll" v0.0 ts=1970-01-01 00:00
  554k 2015/02/01 C:\cygwin64\bin\cyggdk-3-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggdk-3-0.dll" v0.0 ts=2015-02-01 11:55
  118k 2015/01/11 C:\cygwin64\bin\cyggdk_pixbuf-2.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggdk_pixbuf-2.0-0.dll" v0.0 ts=2015-01-11 20:31
  193k 2014/11/18 C:\cygwin64\bin\cyggettextlib-0-19-3.dll - os=4.0 img=0.0 sys=5.2
                  "cyggettextlib-0-19-3.dll" v0.0 ts=2014-11-18 07:06
  238k 2014/11/18 C:\cygwin64\bin\cyggettextsrc-0-19-3.dll - os=4.0 img=0.0 sys=5.2
                  "cyggettextsrc-0-19-3.dll" v0.0 ts=2014-11-18 07:07
 1140k 2015/01/29 C:\cygwin64\bin\cyggfortran-3.dll - os=4.0 img=0.0 sys=5.2
                  "cyggfortran-3.dll" v0.0 ts=2015-01-29 07:22
 1247k 2015/01/11 C:\cygwin64\bin\cyggio-2.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggio-2.0-0.dll" v0.0 ts=2015-01-11 19:42
  594k 2015/01/13 C:\cygwin64\bin\cygGL-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygGL-1.dll" v0.0 ts=2015-01-13 10:00
   77k 2015/02/11 C:\cygwin64\bin\cyggl2ps-1.dll - os=4.0 img=1.3 sys=5.2
                  "cyggl2ps-1.dll" v0.0 ts=2015-02-11 11:29
  250k 2015/01/13 C:\cygwin64\bin\cygglapi-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygglapi-0.dll" v0.0 ts=2015-01-13 09:53
  949k 2015/01/11 C:\cygwin64\bin\cygglib-2.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygglib-2.0-0.dll" v0.0 ts=2015-01-11 19:41
  885k 2013/03/14 C:\cygwin64\bin\cygglpk-33.dll - os=4.0 img=0.0 sys=5.2
                  "cygglpk-33.dll" v0.0 ts=2013-03-14 08:19
  901k 2013/10/03 C:\cygwin64\bin\cygglpk-35.dll - os=4.0 img=0.0 sys=5.2
                  "cygglpk-35.dll" v0.0 ts=2013-10-03 13:59
  896k 2014/08/24 C:\cygwin64\bin\cygglpk-36.dll - os=4.0 img=0.0 sys=5.2
                  "cygglpk-36.dll" v0.0 ts=2014-08-24 06:34
  477k 2013/04/09 C:\cygwin64\bin\cygGLU-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygGLU-1.dll" v0.0 ts=2013-04-09 07:56
   14k 2015/01/11 C:\cygwin64\bin\cyggmodule-2.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggmodule-2.0-0.dll" v0.0 ts=2015-01-11 19:41
  520k 2015/01/26 C:\cygwin64\bin\cyggmp-10.dll - os=4.0 img=0.0 sys=5.2
                  "cyggmp-10.dll" v0.0 ts=2015-01-26 16:08
   21k 2015/01/26 C:\cygwin64\bin\cyggmpxx-4.dll - os=4.0 img=0.0 sys=5.2
                  "cyggmpxx-4.dll" v0.0 ts=2015-01-26 16:08
  126k 2015/01/12 C:\cygwin64\bin\cyggnome-keyring-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggnome-keyring-0.dll" v0.0 ts=2015-01-12 02:39
  867k 2015/02/13 C:\cygwin64\bin\cyggnutls-28.dll - os=4.0 img=0.0 sys=5.2
                  "cyggnutls-28.dll" v0.0 ts=2015-02-13 13:46
   24k 2015/02/13 C:\cygwin64\bin\cyggnutls-openssl-27.dll - os=4.0 img=0.0 sys=5.2
                  "cyggnutls-openssl-27.dll" v0.0 ts=2015-02-13 13:46
   22k 2015/02/13 C:\cygwin64\bin\cyggnutls-xssl-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggnutls-xssl-0.dll" v0.0 ts=2015-02-13 13:46
   42k 2015/02/13 C:\cygwin64\bin\cyggnutlsxx-28.dll - os=4.0 img=0.0 sys=5.2
                  "cyggnutlsxx-28.dll" v0.0 ts=2015-02-13 13:46
  275k 2015/01/11 C:\cygwin64\bin\cyggobject-2.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggobject-2.0-0.dll" v0.0 ts=2015-01-11 19:41
   73k 2015/01/29 C:\cygwin64\bin\cyggomp-1.dll - os=4.0 img=0.0 sys=5.2
                  "cyggomp-1.dll" v0.0 ts=2015-01-29 06:14
   19k 2014/06/01 C:\cygwin64\bin\cyggpg-error-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggpg-error-0.dll" v0.0 ts=1970-01-01 00:00
  276k 2015/02/11 C:\cygwin64\bin\cygGraphicsMagick++-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygGraphicsMagick++-3.dll" v0.0 ts=2015-02-11 16:18
 2908k 2015/02/11 C:\cygwin64\bin\cygGraphicsMagick-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygGraphicsMagick-3.dll" v0.0 ts=2015-02-11 16:17
  146k 2015/02/11 C:\cygwin64\bin\cygGraphicsMagickWand-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygGraphicsMagickWand-2.dll" v0.0 ts=2015-02-11 16:18
  116k 2013/08/05 C:\cygwin64\bin\cyggraphite2-3.dll - os=4.0 img=3.0 sys=5.2
                  "cyggraphite2-3.dll" v0.0 ts=2013-08-05 07:33
11338k 2015/02/12 C:\cygwin64\bin\cyggs-9.dll - os=4.0 img=0.0 sys=5.2
                  "cyggs-9.dll" v0.0 ts=2015-02-12 15:41
  198k 2014/03/20 C:\cygwin64\bin\cyggssapi-3.dll - os=4.0 img=0.0 sys=5.2
                  "cyggssapi-3.dll" v0.0 ts=2014-03-20 06:15
  253k 2014/09/19 C:\cygwin64\bin\cyggssapi_krb5-2.dll - os=4.0 img=0.0 sys=5.2
                  "cyggssapi_krb5-2.dll" v0.0 ts=2014-09-19 18:42
    9k 2015/01/11 C:\cygwin64\bin\cyggthread-2.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggthread-2.0-0.dll" v0.0 ts=2015-01-11 19:41
 6274k 2015/02/01 C:\cygwin64\bin\cyggtk-3-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggtk-3-0.dll" v0.0 ts=2015-02-01 12:00
   17k 2015/02/01 C:\cygwin64\bin\cyggtkreftestprivate-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyggtkreftestprivate-0.dll" v0.0 ts=2015-02-01 12:10
  691k 2013/04/22 C:\cygwin64\bin\cygguile-17.dll - os=4.0 img=0.0 sys=5.2
                  "cygguile-17.dll" v0.0 ts=2013-04-22 03:15
  181k 2015/01/12 C:\cygwin64\bin\cyggvfscommon.dll - os=4.0 img=0.0 sys=5.2
                  "cyggvfscommon.dll" v0.0 ts=2015-01-12 06:20
  121k 2015/01/12 C:\cygwin64\bin\cyggvfsdaemon.dll - os=4.0 img=0.0 sys=5.2
                  "cyggvfsdaemon.dll" v0.0 ts=2015-01-12 06:22
  332k 2015/01/12 C:\cygwin64\bin\cygharfbuzz-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygharfbuzz-0.dll" v0.0 ts=2015-01-12 02:33
 2510k 2014/06/03 C:\cygwin64\bin\cyghdf5-8.dll - os=4.0 img=0.0 sys=5.2
                  "cyghdf5-8.dll" v0.0 ts=1970-01-01 00:00
 2518k 2015/01/20 C:\cygwin64\bin\cyghdf5-9.dll - os=4.0 img=0.0 sys=5.2
                  "cyghdf5-9.dll" v0.0 ts=2015-01-20 10:26
  254k 2014/06/03 C:\cygwin64\bin\cyghdf5_cpp-8.dll - os=4.0 img=0.0 sys=5.2
                  "cyghdf5_cpp-8.dll" v0.0 ts=1970-01-01 00:00
  272k 2015/01/20 C:\cygwin64\bin\cyghdf5_cpp-9.dll - os=4.0 img=0.0 sys=5.2
                  "cyghdf5_cpp-9.dll" v0.0 ts=2015-01-20 10:32
  101k 2014/06/03 C:\cygwin64\bin\cyghdf5_hl-8.dll - os=4.0 img=0.0 sys=5.2
                  "cyghdf5_hl-8.dll" v0.0 ts=1970-01-01 00:00
  103k 2015/01/20 C:\cygwin64\bin\cyghdf5_hl-9.dll - os=4.0 img=0.0 sys=5.2
                  "cyghdf5_hl-9.dll" v0.0 ts=2015-01-20 10:32
   10k 2014/06/03 C:\cygwin64\bin\cyghdf5_hl_cpp-8.dll - os=4.0 img=0.0 sys=5.2
                  "cyghdf5_hl_cpp-8.dll" v0.0 ts=1970-01-01 00:00
   11k 2015/01/20 C:\cygwin64\bin\cyghdf5_hl_cpp-9.dll - os=4.0 img=0.0 sys=5.2
                  "cyghdf5_hl_cpp-9.dll" v0.0 ts=2015-01-20 10:33
   14k 2014/03/20 C:\cygwin64\bin\cygheimbase-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygheimbase-1.dll" v0.0 ts=2014-03-20 04:52
   24k 2014/03/20 C:\cygwin64\bin\cygheimntlm-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygheimntlm-0.dll" v0.0 ts=2014-03-20 06:13
   30k 2015/01/27 C:\cygwin64\bin\cyghistory7.dll - os=4.0 img=0.0 sys=5.2
                  "cyghistory7.dll" v0.0 ts=2015-01-27 03:51
  168k 2015/02/12 C:\cygwin64\bin\cyghogweed-2.dll - os=4.0 img=0.0 sys=5.2
                  "cyghogweed-2.dll" v0.0 ts=2015-02-12 17:27
  236k 2014/03/20 C:\cygwin64\bin\cyghx509-5.dll - os=4.0 img=0.0 sys=5.2
                  "cyghx509-5.dll" v0.0 ts=2014-03-20 04:55
   77k 2014/08/10 C:\cygwin64\bin\cygICE-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygICE-6.dll" v0.0 ts=1970-01-01 00:00
 1002k 2014/12/24 C:\cygwin64\bin\cygiconv-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygiconv-2.dll" v0.0 ts=2014-12-24 07:45
21806k 2013/06/25 C:\cygwin64\bin\cygicudata51.dll - os=4.0 img=0.0 sys=5.2
                  "cygicudata51.dll" v0.0 ts=2013-06-25 06:30
 1717k 2013/06/25 C:\cygwin64\bin\cygicui18n51.dll - os=4.0 img=0.0 sys=5.2
                  "cygicui18n51.dll" v0.0 ts=2013-06-25 06:28
   43k 2013/06/25 C:\cygwin64\bin\cygicuio51.dll - os=4.0 img=0.0 sys=5.2
                  "cygicuio51.dll" v0.0 ts=2013-06-25 06:30
  305k 2013/06/25 C:\cygwin64\bin\cygicule51.dll - os=4.0 img=0.0 sys=5.2
                  "cygicule51.dll" v0.0 ts=2013-06-25 06:28
   38k 2013/06/25 C:\cygwin64\bin\cygiculx51.dll - os=4.0 img=0.0 sys=5.2
                  "cygiculx51.dll" v0.0 ts=2013-06-25 06:28
 1231k 2013/06/25 C:\cygwin64\bin\cygicuuc51.dll - os=4.0 img=0.0 sys=5.2
                  "cygicuuc51.dll" v0.0 ts=2013-06-25 06:27
  196k 2014/12/06 C:\cygwin64\bin\cygidn-11.dll - os=4.0 img=0.0 sys=5.2
                  "cygidn-11.dll" v0.0 ts=2014-12-06 13:17
   39k 2014/11/18 C:\cygwin64\bin\cygintl-8.dll - os=4.0 img=0.0 sys=5.2
                  "cygintl-8.dll" v0.0 ts=2014-11-18 07:04
  888k 2013/05/05 C:\cygwin64\bin\cygisl-10.dll - os=4.0 img=0.0 sys=5.2
                  "cygisl-10.dll" v0.0 ts=2013-05-05 16:36
  272k 2015/01/23 C:\cygwin64\bin\cygjasper-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygjasper-1.dll" v0.0 ts=2015-01-23 18:01
   48k 2014/06/17 C:\cygwin64\bin\cygjbig-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygjbig-2.dll" v0.0 ts=1970-01-01 00:00
   18k 2014/06/17 C:\cygwin64\bin\cygjbig85-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygjbig85-2.dll" v0.0 ts=1970-01-01 00:00
  255k 2014/12/29 C:\cygwin64\bin\cygjpeg-8.dll - os=4.0 img=0.0 sys=5.2
                  "cygjpeg-8.dll" v0.0 ts=2014-12-29 21:07
  128k 2015/01/12 C:\cygwin64\bin\cygjson-glib-1.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygjson-glib-1.0-0.dll" v0.0 ts=2015-01-12 02:33
  179k 2014/09/19 C:\cygwin64\bin\cygk5crypto-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygk5crypto-3.dll" v0.0 ts=2014-09-19 18:41
   23k 2014/03/20 C:\cygwin64\bin\cygkafs-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygkafs-0.dll" v0.0 ts=2014-03-20 06:13
  403k 2014/03/20 C:\cygwin64\bin\cygkrb5-26.dll - os=4.0 img=0.0 sys=5.2
                  "cygkrb5-26.dll" v0.0 ts=2014-03-20 06:12
  701k 2014/09/19 C:\cygwin64\bin\cygkrb5-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygkrb5-3.dll" v0.0 ts=2014-09-19 18:42
   35k 2014/09/19 C:\cygwin64\bin\cygkrb5support-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygkrb5support-0.dll" v0.0 ts=2014-09-19 18:41
   45k 2015/02/19 C:\cygwin64\bin\cyglber-2-4-2.dll - os=4.0 img=0.0 sys=5.2
                  "cyglber-2-4-2.dll" v0.0 ts=2015-02-19 14:39
  189k 2015/02/19 C:\cygwin64\bin\cyglcms-1.dll - os=4.0 img=0.0 sys=5.2
                  "cyglcms-1.dll" v0.0 ts=2015-02-19 12:08
  293k 2014/11/14 C:\cygwin64\bin\cyglcms2-2.dll - os=4.0 img=0.0 sys=5.2
                  "cyglcms2-2.dll" v0.0 ts=2014-11-14 12:24
  246k 2015/02/19 C:\cygwin64\bin\cygldap-2-4-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygldap-2-4-2.dll" v0.0 ts=2015-02-19 14:40
  261k 2015/02/19 C:\cygwin64\bin\cygldap_r-2-4-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygldap_r-2-4-2.dll" v0.0 ts=2015-02-19 14:41
17466k 2015/02/08 C:\cygwin64\bin\cygLLVM-3.4.dll - os=4.0 img=0.0 sys=5.2
                  "cygLLVM-3.4.dll" v0.0 ts=2015-02-08 17:48
    6k 2015/02/04 C:\cygwin64\bin\cyglsa64.dll - os=4.0 img=0.0 sys=5.2
                  "cyglsa64.dll" v0.0 ts=1970-01-01 00:00
   35k 2015/02/17 C:\cygwin64\bin\cygltdl-7.dll - os=4.0 img=0.0 sys=5.2
                  "cygltdl-7.dll" v0.0 ts=2015-02-17 18:26
  128k 2015/01/15 C:\cygwin64\bin\cyglzma-5.dll - os=4.0 img=0.0 sys=5.2
                  "cyglzma-5.dll" v0.0 ts=2015-01-15 20:11
  126k 2014/11/17 C:\cygwin64\bin\cyglzo2-2.dll - os=4.0 img=0.0 sys=5.2
                  "cyglzo2-2.dll" v0.0 ts=2014-11-17 11:24
  113k 2015/02/18 C:\cygwin64\bin\cygmagic-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygmagic-1.dll" v0.0 ts=2015-02-18 10:55
  158k 2014/08/12 C:\cygwin64\bin\cygman-2-6-7.dll - os=4.0 img=0.0 sys=5.2
                  "cygman-2-6-7.dll" v0.0 ts=1970-01-01 00:00
   29k 2014/12/30 C:\cygwin64\bin\cygmenuw-10.dll - os=4.0 img=0.0 sys=5.2
                  "cygmenuw-10.dll" v0.0 ts=2014-12-30 18:05
  347k 2013/07/14 C:\cygwin64\bin\cygmetis-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygmetis-0.dll" v0.0 ts=2013-07-14 13:12
  370k 2013/05/02 C:\cygwin64\bin\cygmng-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygmng-1.dll" v0.0 ts=2013-05-02 12:20
   89k 2015/01/26 C:\cygwin64\bin\cygmpc-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygmpc-3.dll" v0.0 ts=2015-01-26 16:28
  334k 2015/01/26 C:\cygwin64\bin\cygmpfr-4.dll - os=4.0 img=0.0 sys=5.2
                  "cygmpfr-4.dll" v0.0 ts=2015-01-26 16:14
   52k 2014/12/30 C:\cygwin64\bin\cygncurses++w-10.dll - os=4.0 img=0.0 sys=5.2
                  "cygncurses++w-10.dll" v0.0 ts=2014-12-30 18:10
  296k 2014/12/30 C:\cygwin64\bin\cygncursesw-10.dll - os=4.0 img=0.0 sys=5.2
                  "cygncursesw-10.dll" v0.0 ts=2014-12-30 18:04
  185k 2015/02/12 C:\cygwin64\bin\cygnettle-4.dll - os=4.0 img=0.0 sys=5.2
                  "cygnettle-4.dll" v0.0 ts=2015-02-12 17:27
14987k 2014/08/17 C:\cygwin64\bin\cygoctave-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygoctave-2.dll" v0.0 ts=2014-08-17 13:21
 1203k 2014/08/17 C:\cygwin64\bin\cygoctgui-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygoctgui-0.dll" v0.0 ts=2014-08-17 13:56
12337k 2014/08/17 C:\cygwin64\bin\cygoctinterp-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygoctinterp-2.dll" v0.0 ts=2014-08-17 13:49
   30k 2015/01/13 C:\cygwin64\bin\cygOpenVG-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygOpenVG-1.dll" v0.0 ts=2015-01-13 09:53
  220k 2014/10/19 C:\cygwin64\bin\cygp11-kit-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygp11-kit-0.dll" v0.0 ts=2014-10-19 14:36
   14k 2014/12/30 C:\cygwin64\bin\cygpanelw-10.dll - os=4.0 img=0.0 sys=5.2
                  "cygpanelw-10.dll" v0.0 ts=2014-12-30 18:05
  258k 2015/01/12 C:\cygwin64\bin\cygpango-1.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygpango-1.0-0.dll" v0.0 ts=2015-01-12 02:40
   42k 2015/01/12 C:\cygwin64\bin\cygpangocairo-1.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygpangocairo-1.0-0.dll" v0.0 ts=2015-01-12 02:41
   70k 2015/01/12 C:\cygwin64\bin\cygpangoft2-1.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygpangoft2-1.0-0.dll" v0.0 ts=2015-01-12 02:40
   28k 2015/01/12 C:\cygwin64\bin\cygpangoxft-1.0-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygpangoxft-1.0-0.dll" v0.0 ts=2015-01-12 02:40
   11k 2013/07/23 C:\cygwin64\bin\cygpaper-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygpaper-1.dll" v0.0 ts=2013-07-23 05:40
  280k 2014/12/08 C:\cygwin64\bin\cygpcre-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygpcre-1.dll" v0.0 ts=2014-12-08 23:50
 1580k 2013/03/11 C:\cygwin64\bin\cygperl5_14.dll - os=4.0 img=0.0 sys=5.2
                  "cygperl5_14.dll" v0.0 ts=2013-03-12 00:25
 5790k 2015/01/27 C:\cygwin64\bin\cygphp5-5-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygphp5-5-6.dll" v0.0 ts=2015-01-27 20:47
   38k 2014/05/12 C:\cygwin64\bin\cygpipeline-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygpipeline-1.dll" v0.0 ts=1970-01-01 00:00
  654k 2014/11/16 C:\cygwin64\bin\cygpixman-1-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygpixman-1-0.dll" v0.0 ts=2014-11-16 22:16
  148k 2014/12/31 C:\cygwin64\bin\cygpng15-15.dll - os=4.0 img=0.0 sys=5.2
                  "cygpng15-15.dll" v0.0 ts=2014-12-31 20:50
  177k 2014/12/31 C:\cygwin64\bin\cygpng16-16.dll - os=4.0 img=0.0 sys=5.2
                  "cygpng16-16.dll" v0.0 ts=2014-12-31 09:51
   41k 2013/10/21 C:\cygwin64\bin\cygpopt-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygpopt-0.dll" v0.0 ts=2013-10-21 21:52
  844k 2013/05/05 C:\cygwin64\bin\cygppl-9.dll - os=4.0 img=0.0 sys=5.2
                  "cygppl-9.dll" v0.0 ts=2013-05-05 13:53
 2956k 2013/05/05 C:\cygwin64\bin\cygppl_c-4.dll - os=4.0 img=0.0 sys=5.2
                  "cygppl_c-4.dll" v0.0 ts=2013-05-05 13:54
  122k 2013/04/21 C:\cygwin64\bin\cygproxy-1.dll - os=4.0 img=1.0 sys=5.2
                  "cygproxy-1.dll" v0.0 ts=2013-04-21 10:24
   15k 2013/05/05 C:\cygwin64\bin\cygpwl-5.dll - os=4.0 img=0.0 sys=5.2
                  "cygpwl-5.dll" v0.0 ts=2013-05-05 13:53
  310k 2013/03/18 C:\cygwin64\bin\cygqhull-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygqhull-6.dll" v0.0 ts=2013-03-18 10:56
  319k 2013/03/18 C:\cygwin64\bin\cygqhull_p-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygqhull_p-6.dll" v0.0 ts=2013-03-18 10:56
   95k 2013/04/10 C:\cygwin64\bin\cygqrupdate-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygqrupdate-0.dll" v0.0 ts=2013-04-10 20:26
 2737k 2014/10/30 C:\cygwin64\bin\cygqscintilla2-11.dll - os=4.0 img=0.0 sys=5.2
                  "cygqscintilla2-11.dll" v0.0 ts=2014-10-30 08:42
 2696k 2015/01/06 C:\cygwin64\bin\cygQtCore-4.dll - os=4.0 img=0.0 sys=5.2
                  "cygQtCore-4.dll" v0.0 ts=2015-01-06 09:18
 9969k 2015/01/06 C:\cygwin64\bin\cygQtGui-4.dll - os=4.0 img=0.0 sys=5.2
                  "cygQtGui-4.dll" v0.0 ts=2015-01-06 09:26
 1243k 2015/01/06 C:\cygwin64\bin\cygQtNetwork-4.dll - os=4.0 img=0.0 sys=5.2
                  "cygQtNetwork-4.dll" v0.0 ts=2015-01-06 09:19
  305k 2015/01/29 C:\cygwin64\bin\cygquadmath-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygquadmath-0.dll" v0.0 ts=2015-01-29 06:58
  207k 2015/01/27 C:\cygwin64\bin\cygreadline7.dll - os=4.0 img=0.0 sys=5.2
                  "cygreadline7.dll" v0.0 ts=2015-01-27 03:51
   72k 2015/01/12 C:\cygwin64\bin\cygrest-0.7-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygrest-0.7-0.dll" v0.0 ts=2015-01-12 02:43
   28k 2015/01/12 C:\cygwin64\bin\cygrest-extras-0.7-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygrest-extras-0.7-0.dll" v0.0 ts=2015-01-12 02:44
   57k 2014/03/20 C:\cygwin64\bin\cygroken-18.dll - os=4.0 img=0.0 sys=5.2
                  "cygroken-18.dll" v0.0 ts=2014-03-20 04:53
  205k 2015/02/18 C:\cygwin64\bin\cygrsvg-2-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygrsvg-2-2.dll" v0.0 ts=2015-02-18 05:47
   97k 2014/11/24 C:\cygwin64\bin\cygsasl2-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygsasl2-3.dll" v0.0 ts=2014-11-24 18:22
  249k 2015/01/12 C:\cygwin64\bin\cygsecret-1-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygsecret-1-0.dll" v0.0 ts=2015-01-12 02:14
   28k 2014/01/14 C:\cygwin64\bin\cygSM-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygSM-6.dll" v0.0 ts=2014-01-14 23:23
   88k 2014/12/01 C:\cygwin64\bin\cygsmartcols-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygsmartcols-1.dll" v0.0 ts=2014-12-01 23:56
  584k 2015/01/12 C:\cygwin64\bin\cygsoup-2.4-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygsoup-2.4-1.dll" v0.0 ts=2015-01-12 02:32
   11k 2015/01/12 C:\cygwin64\bin\cygsoup-gnome-2.4-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygsoup-gnome-2.4-1.dll" v0.0 ts=2015-01-12 02:32
  750k 2015/01/30 C:\cygwin64\bin\cygsqlite3-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygsqlite3-0.dll" v0.0 ts=2015-01-30 23:25
  142k 2014/11/09 C:\cygwin64\bin\cygssh2-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygssh2-1.dll" v0.0 ts=2014-11-09 21:20
  382k 2015/01/08 C:\cygwin64\bin\cygssl-1.0.0.dll - os=4.0 img=0.0 sys=5.2
                  "cygssl-1.0.0.dll" v0.0 ts=2015-01-08 20:02
   12k 2015/01/29 C:\cygwin64\bin\cygssp-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygssp-0.dll" v0.0 ts=2015-01-29 06:53
  941k 2015/01/29 C:\cygwin64\bin\cygstdc++-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygstdc++-6.dll" v0.0 ts=2015-01-29 06:13
    8k 2013/07/14 C:\cygwin64\bin\cygsuitesparseconfig-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygsuitesparseconfig-0.dll" v0.0 ts=2013-07-14 15:16
   64k 2014/11/13 C:\cygwin64\bin\cygtasn1-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygtasn1-6.dll" v0.0 ts=2014-11-13 18:20
   32k 2014/11/12 C:\cygwin64\bin\cygthai-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygthai-0.dll" v0.0 ts=2014-11-12 16:31
   52k 2014/12/30 C:\cygwin64\bin\cygticw-10.dll - os=4.0 img=0.0 sys=5.2
                  "cygticw-10.dll" v0.0 ts=2014-12-30 18:04
  363k 2014/05/15 C:\cygwin64\bin\cygtiff-5.dll - os=4.0 img=0.0 sys=5.2
                  "cygtiff-5.dll" v0.0 ts=1970-01-01 00:00
  415k 2014/05/30 C:\cygwin64\bin\cygtiff-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygtiff-6.dll" v0.0 ts=1970-01-01 00:00
   12k 2014/05/15 C:\cygwin64\bin\cygtiffxx-5.dll - os=4.0 img=0.0 sys=5.2
                  "cygtiffxx-5.dll" v0.0 ts=1970-01-01 00:00
   12k 2014/05/30 C:\cygwin64\bin\cygtiffxx-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygtiffxx-6.dll" v0.0 ts=1970-01-01 00:00
  677k 2013/07/14 C:\cygwin64\bin\cygumfpack-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygumfpack-0.dll" v0.0 ts=2013-07-14 21:49
 1252k 2014/09/04 C:\cygwin64\bin\cygunistring-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygunistring-2.dll" v0.0 ts=2014-09-04 21:06
   15k 2014/12/01 C:\cygwin64\bin\cyguuid-1.dll - os=4.0 img=0.0 sys=5.2
                  "cyguuid-1.dll" v0.0 ts=2014-12-01 23:56
  340k 2015/01/02 C:\cygwin64\bin\cygwebp-5.dll - os=4.0 img=0.0 sys=5.2
                  "cygwebp-5.dll" v0.0 ts=2015-01-02 01:50
  161k 2014/03/20 C:\cygwin64\bin\cygwind-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygwind-0.dll" v0.0 ts=2014-03-20 04:53
  312k 2015/02/12 C:\cygwin64\bin\cygwmf-0-2-7.dll - os=4.0 img=0.0 sys=5.2
                  "cygwmf-0-2-7.dll" v0.0 ts=2015-02-12 15:13
  102k 2015/02/12 C:\cygwin64\bin\cygwmflite-0-2-7.dll - os=4.0 img=0.0 sys=5.2
                  "cygwmflite-0-2-7.dll" v0.0 ts=2015-02-12 15:13
   30k 2013/11/15 C:\cygwin64\bin\cygwrap-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygwrap-0.dll" v0.0 ts=2013-11-15 19:58
 1121k 2014/10/21 C:\cygwin64\bin\cygX11-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygX11-6.dll" v0.0 ts=2014-10-21 02:59
    9k 2014/10/21 C:\cygwin64\bin\cygX11-xcb-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygX11-xcb-1.dll" v0.0 ts=2014-10-21 02:59
   12k 2013/06/06 C:\cygwin64\bin\cygXau-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygXau-6.dll" v0.0 ts=2013-06-06 06:23
  102k 2014/05/20 C:\cygwin64\bin\cygxcb-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygxcb-1.dll" v0.0 ts=1970-01-01 00:00
   71k 2014/05/20 C:\cygwin64\bin\cygxcb-glx-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygxcb-glx-0.dll" v0.0 ts=1970-01-01 00:00
   32k 2014/05/20 C:\cygwin64\bin\cygxcb-render-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygxcb-render-0.dll" v0.0 ts=1970-01-01 00:00
   13k 2014/05/20 C:\cygwin64\bin\cygxcb-shm-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygxcb-shm-0.dll" v0.0 ts=1970-01-01 00:00
   11k 2013/03/18 C:\cygwin64\bin\cygXcomposite-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygXcomposite-1.dll" v0.0 ts=2013-03-18 23:05
   34k 2013/06/06 C:\cygwin64\bin\cygXcursor-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygXcursor-1.dll" v0.0 ts=2013-06-06 21:15
   10k 2013/04/08 C:\cygwin64\bin\cygXdamage-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygXdamage-1.dll" v0.0 ts=2013-04-08 22:24
   21k 2013/03/13 C:\cygwin64\bin\cygXdmcp-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygXdmcp-6.dll" v0.0 ts=2013-03-13 04:58
   56k 2014/08/10 C:\cygwin64\bin\cygXext-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygXext-6.dll" v0.0 ts=1970-01-01 00:00
   19k 2013/06/06 C:\cygwin64\bin\cygXfixes-3.dll - os=4.0 img=0.0 sys=5.2
                  "cygXfixes-3.dll" v0.0 ts=2013-06-06 20:27
   73k 2014/08/10 C:\cygwin64\bin\cygXft-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygXft-2.dll" v0.0 ts=1970-01-01 00:00
   56k 2014/08/10 C:\cygwin64\bin\cygXi-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygXi-6.dll" v0.0 ts=1970-01-01 00:00
   10k 2013/06/06 C:\cygwin64\bin\cygXinerama-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygXinerama-1.dll" v0.0 ts=2013-06-06 21:33
 1207k 2014/10/19 C:\cygwin64\bin\cygxml2-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygxml2-2.dll" v0.0 ts=2014-10-19 08:52
   34k 2014/01/14 C:\cygwin64\bin\cygXrandr-2.dll - os=4.0 img=0.0 sys=5.2
                  "cygXrandr-2.dll" v0.0 ts=2014-01-14 23:56
   35k 2013/06/14 C:\cygwin64\bin\cygXrender-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygXrender-1.dll" v0.0 ts=2013-06-14 09:29
   12k 2013/03/14 C:\cygwin64\bin\cygXss-1.dll - os=4.0 img=0.0 sys=5.2
                  "cygXss-1.dll" v0.0 ts=2013-03-14 04:07
  320k 2014/08/10 C:\cygwin64\bin\cygXt-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygXt-6.dll" v0.0 ts=1970-01-01 00:00
   21k 2013/06/06 C:\cygwin64\bin\cygXtst-6.dll - os=4.0 img=0.0 sys=5.2
                  "cygXtst-6.dll" v0.0 ts=2013-06-06 20:36
   80k 2014/11/19 C:\cygwin64\bin\cygz.dll - os=4.0 img=0.0 sys=5.2
                  "cygz.dll" v0.0 ts=2014-11-19 23:08
 3182k 2015/02/04 C:\cygwin64\bin\cygwin1.dll - os=4.0 img=0.0 sys=5.2
                  "cygwin1.dll" v0.0 ts=1970-01-01 00:00
    Cygwin DLL version info:
        DLL version: 1.7.34
        DLL epoch: 19
        DLL old termios: 5
        DLL malloc env: 28
        Cygwin conv: 181
        API major: 0
        API minor: 285
        Shared data: 5
        DLL identifier: cygwin1
        Mount registry: 3
        Cygwin registry name: Cygwin
        Installations name: Installations
        Cygdrive default prefix: 
        Build date: 
        Shared id: cygwin1S5

  449k 2015/02/10 C:\cygwin64\lib\lapack\cygblas-0.dll - os=4.0 img=0.0 sys=5.2
                  "cygblas-0.dll" v0.0 ts=2015-02-10 13:59
 5698k 2015/02/10 C:\cygwin64\lib\lapack\cyglapack-0.dll - os=4.0 img=0.0 sys=5.2
                  "cyglapack-0.dll" v0.0 ts=2015-02-10 13:59

Service             : inetd               
Display name        : CYGWIN inetd
Current State       : Running
Controls Accepted   : Stop
Command             : /usr/sbin/inetd -D
stdin path          : /dev/null
stdout path         : /var/log/inetd.log
stderr path         : /var/log/inetd.log
Environment         : CYGWIN="" 
Process Type        : Own Process
Startup             : Automatic
Dependencies        : tcpip
Account             : .\cyg_server


Cygwin Package Information
Last downloaded files to: C:\cygwin64\setup
Last downloaded files from: ftp://ftp.jaist.ac.jp/pub/cygwin/

Package                                 Version                Status
_autorebase                             001002-1               OK
_update-info-dir                        00383-1                OK
adwaita-icon-theme                      3.14.1-1               OK
alternatives                            1.3.30c-10             OK
at-spi2-core                            2.14.1-1               OK
autoconf                                13-1                   OK
autoconf2.1                             2.13-12                OK
autoconf2.5                             2.69-2                 OK
automake                                9-1                    OK
automake1.10                            1.10.3-2               OK
automake1.11                            1.11.6-2               OK
automake1.12                            1.12.6-2               OK
automake1.13                            1.13.4-1               OK
automake1.14                            1.14.1-1               OK
automake1.4                             1.4p6-11               OK
automake1.5                             1.5-11                 OK
automake1.6                             1.6.3-12               OK
automake1.7                             1.7.9-11               OK
automake1.8                             1.8.5-11               OK
automake1.9                             1.9.6-11               OK
base-cygwin                             3.6-1                  OK
base-files                              4.2-3                  OK
bash                                    4.3.33-1               OK
binutils                                2.25-1                 OK
bison                                   3.0.4-1                OK
byacc                                   20130304-1             OK
bzip2                                   1.0.6-2                OK
ca-certificates                         2.2-1                  OK
coreutils                               8.23-4                 OK
crypt                                   1.1-1                  OK
csih                                    0.9.8-4                OK
cygport                                 0.17.1-1               OK
cygrunsrv                               1.62-1                 OK
cygutils                                1.4.14-1               OK
cygwin                                  1.7.34-6               OK
cygwin-devel                            1.7.34-6               OK
cygwin32                                1.7.33-1               OK
cygwin32-binutils                       2.24.90-2              OK
cygwin32-default-manifest               6.4-1                  OK
cygwin32-gcc-core                       4.8.3-4                OK
cygwin32-gcc-g++                        4.8.3-4                OK
cygwin32-w32api-headers                 3.2.0-1                OK
cygwin32-w32api-runtime                 3.2.0-1                OK
dash                                    0.5.8-3                OK
dbus                                    1.8.16-1               OK
dconf-service                           0.22.0-1               OK
desktop-file-utils                      0.21-1                 OK
diffstat                                1.59-1                 OK
diffutils                               3.3-2                  OK
dos2unix                                7.2-1                  OK
dri-drivers                             10.3.7-1               OK
editrights                              1.03-1                 OK
file                                    5.22-1                 OK
findutils                               4.5.12-1               OK
font-encodings                          1.0.4-1                OK
font-ibm-type1                          1.0.2-1                OK
fontconfig                              2.11.1-2               OK
gamin                                   0.1.10-15              OK
gawk                                    4.1.1-1                OK
gcc-core                                4.9.2-2                OK
gcc-g++                                 4.9.2-2                OK
gcr                                     3.14.0-1               OK
gdk-pixbuf2.0-svg                       2.40.7-1               OK
getent                                  2.18.90-4              OK
gettext                                 0.19.3-1               OK
gettext-devel                           0.19.3-1               OK
ghostscript                             9.15-2                 OK
ghostscript-fonts-other                 6.0-1                  OK
ghostscript-fonts-std                   8.11-1                 OK
git                                     2.1.4-1                OK
glib2.0-networking                      2.42.1-1               OK
gnome-icon-theme                        3.10.0-1               OK
gnome-keyring                           3.14.0-1               OK
grep                                    2.21-2                 OK
groff                                   1.22.2-2               OK
gsettings-desktop-schemas               3.14.1-1               OK
gtk-update-icon-cache                   3.14.8-1               OK
gvfs                                    1.22.2-1               OK
gzip                                    1.6-1                  OK
hdf5                                    1.8.14-1               OK
help2man                                1.44.1-1               OK
hicolor-icon-theme                      0.12-1                 OK
hostname                                3.13-1                 OK
inetutils                               1.9.1-2                OK
inetutils-server                        1.9.1-2                OK
info                                    5.2-3                  OK
ipc-utils                               1.0-2                  OK
less                                    458-2                  OK
libamd0                                 2.3.1-2                OK
libarchive13                            3.1.2-2                OK
libargp                                 20110921-2             OK
libarpack0                              3.1.5-1                OK
libasn1_8                               1.5.3-1                OK
libatk-bridge2.0_0                      2.14.1-1               OK
libatk1.0_0                             2.14.0-1               OK
libatomic1                              4.9.2-2                OK
libatspi0                               2.14.1-1               OK
libattr1                                2.4.46-1               OK
libaudio2                               1.9.3-1                OK
libavahi-client3                        0.6.31-2               OK
libavahi-common3                        0.6.31-2               OK
libavahi-glib1                          0.6.31-2               OK
libblkid1                               2.25.2-1               OK
libbz2_1                                1.0.6-2                OK
libcairo2                               1.12.18-2              OK
libcamd0                                2.3.1-2                OK
libcatgets1                             1.1-2                  OK
libccolamd0                             2.8.0-2                OK
libcharset1                             1.14-2                 OK
libcholmod0                             2.1.2-1                OK
libcloog-isl4                           0.18.0-2               OK
libcloog0                               0.15.11-2              OK
libcolamd0                              2.8.0-2                OK
libcom_err2                             1.42.10-1              OK
libcroco0.6_3                           0.6.8-1                OK
libcrypt-devel                          1.1-1                  OK
libcrypt0                               1.1-1                  OK
libcurl4                                7.40.0-1               OK
libcxsparse0                            3.1.2-1                OK
libdatrie1                              0.2.8-1                OK
libdb5.3                                5.3.21-1               OK
libdbus1_3                              1.8.16-1               OK
libedit0                                20130712-1             OK
libEGL1                                 10.3.7-1               OK
libexpat1                               2.1.0-3                OK
libfam0                                 0.1.10-15              OK
libffi6                                 3.2.1-1                OK
libfftw3_3                              3.3.4-1                OK
libfltk1.3                              1.3.2.9965-1           OK
libfontconfig1                          2.11.1-2               OK
libfontenc1                             1.1.2-1                OK
libfreetype6                            2.5.5-1                OK
libgcc1                                 4.9.2-2                OK
libgck1_0                               3.14.0-1               OK
libgcr3-common                          3.14.0-1               OK
libgcr3_1                               3.14.0-1               OK
libgcrypt11                             1.5.3-1                OK
libgdbm4                                1.11-1                 OK
libgdk_pixbuf2.0_0                      2.31.1-1               OK
libgfortran3                            4.9.2-2                OK
libGL1                                  10.3.7-1               OK
libgl2ps1                               1.3.8-2                OK
libglapi0                               10.3.7-1               OK
libglib2.0_0                            2.42.1-1               OK
libglpk33                               4.48-1                 OK
libglpk35                               4.52-1                 OK
libglpk36                               4.55-1                 OK
libGLU1                                 9.0.0-1                OK
libgmp10                                6.0.0a-2               OK
libgmpxx4                               6.0.0a-2               OK
libgnome-keyring0                       3.12.0-1               OK
libgnutls28                             3.2.21-1               OK
libgomp1                                4.9.2-2                OK
libgpg-error0                           1.12-1                 OK
libGraphicsMagick3                      1.3.20-2               OK
libgraphite2_3                          1.2.3-1                OK
libgs9                                  9.15-2                 OK
libgssapi3                              1.5.3-1                OK
libgssapi_krb5_2                        1.12.2-1               OK
libgtk3_0                               3.14.8-1               OK
libguile17                              1.8.8-1                OK
libharfbuzz0                            0.9.36-1               OK
libhdf5-devel                           1.8.14-1               OK
libhdf5_8                               1.8.13-1               OK
libhdf5_9                               1.8.14-1               OK
libheimbase1                            1.5.3-1                OK
libheimntlm0                            1.5.3-1                OK
libhogweed2                             2.7-2                  OK
libhx509_5                              1.5.3-1                OK
libICE6                                 1.0.9-1                OK
libiconv                                1.14-2                 OK
libiconv2                               1.14-2                 OK
libicu51                                51.2-1                 OK
libidn11                                1.29-1                 OK
libintl-devel                           0.19.3-1               OK
libintl8                                0.19.3-1               OK
libisl10                                0.11.1-2               OK
libjasper1                              1.900.1-15             OK
libjbig2                                2.0-14                 OK
libjpeg8                                1.3.1-3                OK
libjson-glib1.0_0                       1.0.2-1                OK
libk5crypto3                            1.12.2-1               OK
libkafs0                                1.5.3-1                OK
libkrb5_26                              1.5.3-1                OK
libkrb5_3                               1.12.2-1               OK
libkrb5support0                         1.12.2-1               OK
liblapack0                              3.5.0r1524-1           OK
liblcms1                                1.19-5                 OK
liblcms2_2                              2.6-1                  OK
libllvm3.4                              3.4.2-5                OK
libltdl7                                2.4.6-1                OK
liblzma5                                5.0.8-1                OK
liblzo2_2                               2.08-1                 OK
libmetis0                               5.1.0-1                OK
libmng1                                 1.0.10-1               OK
libmpc3                                 1.0.2-2                OK
libmpfr4                                3.1.2-2                OK
libncurses-devel                        5.9-20141227-1         OK
libncursesw10                           5.9-20141227-1         OK
libnettle4                              2.7-2                  OK
libopenldap2_4_2                        2.4.40-2               OK
libopenssl100                           1.0.1k-1               OK
libOpenVG1                              10.3.7-1               OK
libp11-kit0                             0.20.7-1               OK
libpango1.0_0                           1.36.8-1               OK
libpaper-common                         1.1.24-2               OK
libpaper1                               1.1.24-2               OK
libpcre1                                8.36-1                 OK
libpipeline1                            1.3.0-3                OK
libpixman1_0                            0.32.6-1               OK
libpng-doc                              1.6.16-1               OK
libpng15                                1.5.21-2               OK
libpng16                                1.6.16-1               OK
libpopt0                                1.16-1                 OK
libppl9                                 0.11.2-2               OK
libppl_c4                               0.11.2-2               OK
libproxy1                               0.4.11-2               OK
libpwl5                                 0.11.2-2               OK
libqhull_6                              2012.1-2               OK
libqrupdate0                            1.1.2-1                OK
libqscintilla2-common                   2.8.4-1                OK
libqscintilla2_11                       2.8.4-1                OK
libQtCore4                              4.8.6-4                OK
libQtGui4                               4.8.6-4                OK
libQtNetwork4                           4.8.6-4                OK
libquadmath0                            4.9.2-2                OK
libreadline-devel                       6.3.8-1                OK
libreadline7                            6.3.8-1                OK
librest0.7_0                            0.7.92-1               OK
libroken18                              1.5.3-1                OK
librsvg2_2                              2.40.7-1               OK
libsasl2_3                              2.1.26-9               OK
libsecret1_0                            0.18-1                 OK
libSM6                                  1.2.2-1                OK
libsmartcols1                           2.25.2-1               OK
libsoup-gnome2.4_1                      2.48.1-1               OK
libsoup2.4_1                            2.48.1-1               OK
libsqlite3_0                            3.8.8.2-1              OK
libssh2_1                               1.4.3-1                OK
libssp0                                 4.9.2-2                OK
libstdc++6                              4.9.2-2                OK
libsuitesparseconfig0                   4.2.1-1                OK
libtasn1_6                              4.2-1                  OK
libthai0                                0.1.21-1               OK
libtiff5                                3.9.7-4                OK
libtiff6                                4.0.3-2                OK
libtool                                 2.4.6-1                OK
libumfpack0                             5.6.2-1                OK
libunistring2                           0.9.4-1                OK
libuuid-devel                           2.25.2-1               OK
libuuid1                                2.25.2-1               OK
libwebp5                                0.4.2-1                OK
libwind0                                1.5.3-1                OK
libwmf027                               0.2.8.4-13             OK
libwrap0                                7.6-22                 OK
libX11-xcb1                             1.6.2-2                OK
libX11_6                                1.6.2-2                OK
libXau6                                 1.0.8-1                OK
libxcb-glx0                             1.10-1                 OK
libxcb-render0                          1.10-1                 OK
libxcb-shm0                             1.10-1                 OK
libxcb1                                 1.10-1                 OK
libXcomposite1                          0.4.3-1                OK
libXcursor1                             1.1.14-1               OK
libXdamage1                             1.1.4-1                OK
libXdmcp6                               1.1.1-1                OK
libXext6                                1.3.3-1                OK
libXfixes3                              5.0.1-1                OK
libXft2                                 2.3.2-1                OK
libXi6                                  1.7.4-1                OK
libXinerama1                            1.1.3-1                OK
libxml2                                 2.9.2-1                OK
libXrandr2                              1.4.2-1                OK
libXrender1                             0.9.8-1                OK
libXss1                                 1.2.2-1                OK
libXt6                                  1.1.4-2                OK
libXtst6                                1.2.2-1                OK
lndir                                   1.0.3-1                OK
login                                   1.11-1                 OK
lynx                                    2.8.7-2                OK
m4                                      1.4.17-1               OK
make                                    4.1-1                  OK
Empty package man
man                                     2.6.7-2                OK
man-db                                  2.6.7-2                OK
mingw-binutils                          2.23.1-1               OK
mingw-gcc-core                          4.7.3-1                OK
mingw-gcc-g++                           4.7.3-1                OK
mingw-pthreads                          20110507-2             OK
mingw-runtime                           4.0-1                  OK
mingw-w32api                            4.0-1                  OK
mingw64-i686-binutils                   2.24.0.3.85cf705-1     OK
mingw64-i686-gcc-core                   4.8.3-1                OK
mingw64-i686-gcc-g++                    4.8.3-1                OK
mingw64-i686-headers                    3.3.0-1                OK
mingw64-i686-runtime                    3.3.0-1                OK
mingw64-i686-windows-default-manifest   6.4-1                  OK
mingw64-i686-winpthreads                3.3.0-1                OK
mingw64-x86_64-binutils                 2.24.0.3.85cf705-1     OK
mingw64-x86_64-gcc-core                 4.8.3-1                OK
mingw64-x86_64-gcc-g++                  4.8.3-1                OK
mingw64-x86_64-headers                  3.2.0-1                OK
mingw64-x86_64-runtime                  3.2.0-1                OK
mingw64-x86_64-windows-default-manifest 6.4-1                  OK
mingw64-x86_64-winpthreads              3.2.0-1                OK
mintty                                  1.2-beta1-1            OK
mkfontdir                               1.0.7-1                OK
mkfontscale                             1.1.1-1                OK
msmtp                                   1.4.31-1               OK
ncurses                                 5.9-20141227-1         OK
octave                                  3.8.2-1                OK
octave-communications                   1.2.0-1                OK
octave-control                          2.6.5-1                OK
octave-devel                            3.8.2-1                OK
octave-general                          1.3.4-1                OK
octave-signal                           1.3.0-1                OK
openssh                                 6.7p1-2                OK
openssl                                 1.0.1k-1               OK
p11-kit                                 0.20.7-1               OK
p11-kit-trust                           0.20.7-1               OK
patch                                   2.7.4-1                OK
perl                                    5.14.4-1               OK
perl-Error                              0.17019-1              OK
perl-Locale-gettext                     1.05-12                OK
perl_autorebase                         5.14.4-3               OK
Empty package perl_base
perl_base                               5.14.4-1               OK
php                                     5.6.5-1                OK
popt                                    1.16-1                 OK
procps                                  3.2.8-3                OK
python                                  2.7.8-1                OK
python-tkinter                          2.7.8-1                OK
rebase                                  4.4.1-1                OK
rsync                                   3.1.1-1                OK
run                                     1.3.3-1                OK
sed                                     4.2.2-3                OK
shared-mime-info                        1.3-3                  OK
tar                                     1.27.1-1               OK
tcl                                     8.5.11-1               OK
tcl-tix                                 8.4.3-2                OK
tcl-tk                                  8.5.11-1               OK
tcp_wrappers                            7.6-22                 OK
tcsh                                    6.18.01-3              OK
terminfo                                5.9-20141227-1         OK
texinfo                                 5.2-3                  OK
tftp                                    5.2-1                  OK
tzcode                                  2014j-1                OK
unzip                                   6.0-14                 OK
util-linux                              2.25.2-1               OK
vim                                     7.4.629-1              OK
vim-common                              7.4.629-1              OK
vim-minimal                             7.4.629-1              OK
w32api-headers                          3.3.0-2                OK
w32api-runtime                          3.3.0-1                OK
wget                                    1.16.1-1               OK
which                                   2.20-2                 OK
windows-default-manifest                6.4-1                  OK
xxd                                     7.4.629-1              OK
xz                                      5.0.8-1                OK
zlib0                                   1.2.8-3                OK
Use -h to see help about each section

[-- Attachment #3: Type: text/plain, Size: 218 bytes --]

--
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

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-02-28 12:40 Cygwin hangs up if several keys are typed during outputting a lot of texts Takashi Yano
@ 2015-02-28 13:16 ` Denis Excoffier
  2015-02-28 17:56 ` Corinna Vinschen
  1 sibling, 0 replies; 29+ messages in thread
From: Denis Excoffier @ 2015-02-28 13:16 UTC (permalink / raw)
  To: Takashi Yano; +Cc: cygwin

On 2015-02-28 06:40, Takashi Yano wrote:
> 
> Package: cygwin
> Version: 1.7.34-6
> 
> Cygwin often hangs up if several keys are input during a lot of text outputs.
> 
> To reproduce this problem:
> 1) Start a new cygwin session on mintty.
> 2) Execute
>     yes AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
>   or
>     od /dev/urandom
> 3) Hit 'a' key several times during text outputs.
> 
> If echo is disabled like:
>     stty -echo; yes AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
> the problem does not occur.
> 
> 

I concur.

The same occurs under xterm and 1.7.35-0.5 (under NT).

You can pipe your yes/od command into 'head -10000' and the same
applies (as long as you type the additional characters before the end
of course).

In fact, Cygwin does not hang, only the xterm window hangs.

And, the same: with 'stty -echo' the problem does not occur.

I'll add that this is not new (occurred for me at least for the last few months, even perhaps years).

I'm happy that Takashi found:
- a fully reproducible case
- that the problem vanishes with stty -echo (that could perhaps mean a quick resolution...)

Regards,

Denis Excoffier.
--
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

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-02-28 12:40 Cygwin hangs up if several keys are typed during outputting a lot of texts Takashi Yano
  2015-02-28 13:16 ` Denis Excoffier
@ 2015-02-28 17:56 ` Corinna Vinschen
  2015-03-02 11:45   ` Takashi Yano
  1 sibling, 1 reply; 29+ messages in thread
From: Corinna Vinschen @ 2015-02-28 17:56 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 1138 bytes --]

Hi Takashi,

On Feb 28 14:40, Takashi Yano wrote:
> Package: cygwin
> Version: 1.7.34-6
> 
> Cygwin often hangs up if several keys are input during a lot of text outputs.
> 
> To reproduce this problem:
> 1) Start a new cygwin session on mintty.
> 2) Execute
>      yes AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
>    or
>      od /dev/urandom
> 3) Hit 'a' key several times during text outputs.
> 
> If echo is disabled like:
>      stty -echo; yes AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
> the problem does not occur.

Hmm, I can reproduce this even with stty -echo.  The tty code is not
exactly my domain, so I'm not sure at the moment where to look.  I guess
the locking strategy in the tty code is not robust enough.  Did you have
a look into the cygwin sources in the meantime, by any chance?

Since this is not a regression from 1.7.34, I'll defer this problem
until after the 1.7.35 release.


Thanks,
Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-02-28 17:56 ` Corinna Vinschen
@ 2015-03-02 11:45   ` Takashi Yano
  2015-03-02 14:44     ` Corinna Vinschen
  0 siblings, 1 reply; 29+ messages in thread
From: Takashi Yano @ 2015-03-02 11:45 UTC (permalink / raw)
  To: cygwin

On Sat, 28 Feb 2015 15:02:51 +0100
Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:

> Hmm, I can reproduce this even with stty -echo.  The tty code is not

Some shells seem to re-enable echo when it goes back into prompt.
Please put both 'stty' and 'yes' in one command line, separating
them with semi-colon.

> exactly my domain, so I'm not sure at the moment where to look.  I guess
> the locking strategy in the tty code is not robust enough.  Did you have
> a look into the cygwin sources in the meantime, by any chance?

To tell the truth, I have looked into the source code.
I guess the mechanism of blocking is as follows.

1) Buffer of named pipe gets full-filled by a lot of data written
  by slave side.
2) WriteFile() in fhandler_pty_master::doecho(), which is called
  from master side by key input, is blocked because the buffer
  is full.
3) If a handling to read from the pipe is in the same thread as
  key input, the thread falls into deadlock.

To check buffer space before WriteFile() is one idea,
but it is not smart, I suppose...

-- 
Takashi Yano <takashi.yano@nifty.ne.jp>

--
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

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-03-02 11:45   ` Takashi Yano
@ 2015-03-02 14:44     ` Corinna Vinschen
  2015-03-02 14:50       ` Corinna Vinschen
  2015-03-04 11:36       ` Takashi Yano
  0 siblings, 2 replies; 29+ messages in thread
From: Corinna Vinschen @ 2015-03-02 14:44 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 1732 bytes --]

Hi Takashi,

On Mar  2 20:45, Takashi Yano wrote:
> On Sat, 28 Feb 2015 15:02:51 +0100
> Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:
> 
> > Hmm, I can reproduce this even with stty -echo.  The tty code is not
> 
> Some shells seem to re-enable echo when it goes back into prompt.
> Please put both 'stty' and 'yes' in one command line, separating
> them with semi-colon.

Uh, ok, I didn't realize that.

> > exactly my domain, so I'm not sure at the moment where to look.  I guess
> > the locking strategy in the tty code is not robust enough.  Did you have
> > a look into the cygwin sources in the meantime, by any chance?
> 
> To tell the truth, I have looked into the source code.
> I guess the mechanism of blocking is as follows.
> 
> 1) Buffer of named pipe gets full-filled by a lot of data written
>   by slave side.
> 2) WriteFile() in fhandler_pty_master::doecho(), which is called
>   from master side by key input, is blocked because the buffer
>   is full.
> 3) If a handling to read from the pipe is in the same thread as
>   key input, the thread falls into deadlock.
> 
> To check buffer space before WriteFile() is one idea,
> but it is not smart, I suppose...

I think that's not it.  For testing I added code to convert the
WriteFile calls in fhandler_pty_slave::write, fhandler_pty_master::doecho
and fhandler_pty_slave::write to overlapped I/O and made sure to wait
for the result after the output mutex has been released.

This change has no effect at all.  Looks like this needs some more
digging.


Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-03-02 14:44     ` Corinna Vinschen
@ 2015-03-02 14:50       ` Corinna Vinschen
  2015-03-04 11:36       ` Takashi Yano
  1 sibling, 0 replies; 29+ messages in thread
From: Corinna Vinschen @ 2015-03-02 14:50 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 1993 bytes --]

On Mar  2 15:44, Corinna Vinschen wrote:
> Hi Takashi,
> 
> On Mar  2 20:45, Takashi Yano wrote:
> > On Sat, 28 Feb 2015 15:02:51 +0100
> > Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:
> > 
> > > Hmm, I can reproduce this even with stty -echo.  The tty code is not
> > 
> > Some shells seem to re-enable echo when it goes back into prompt.
> > Please put both 'stty' and 'yes' in one command line, separating
> > them with semi-colon.
> 
> Uh, ok, I didn't realize that.
> 
> > > exactly my domain, so I'm not sure at the moment where to look.  I guess
> > > the locking strategy in the tty code is not robust enough.  Did you have
> > > a look into the cygwin sources in the meantime, by any chance?
> > 
> > To tell the truth, I have looked into the source code.
> > I guess the mechanism of blocking is as follows.
> > 
> > 1) Buffer of named pipe gets full-filled by a lot of data written
> >   by slave side.
> > 2) WriteFile() in fhandler_pty_master::doecho(), which is called
> >   from master side by key input, is blocked because the buffer
> >   is full.
> > 3) If a handling to read from the pipe is in the same thread as
> >   key input, the thread falls into deadlock.
> > 
> > To check buffer space before WriteFile() is one idea,
> > but it is not smart, I suppose...
> 
> I think that's not it.  For testing I added code to convert the
> WriteFile calls in fhandler_pty_slave::write, fhandler_pty_master::doecho
> and fhandler_pty_slave::write to overlapped I/O and made sure to wait

Copy/paste didn't quite work as I expected.  Substitute one of these
fhandler_pty_slave::write with fhandler_pty_master::accept_input.

> for the result after the output mutex has been released.
> 
> This change has no effect at all.  Looks like this needs some more
> digging.


Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-03-02 14:44     ` Corinna Vinschen
  2015-03-02 14:50       ` Corinna Vinschen
@ 2015-03-04 11:36       ` Takashi Yano
  2015-03-04 12:43         ` Corinna Vinschen
  1 sibling, 1 reply; 29+ messages in thread
From: Takashi Yano @ 2015-03-04 11:36 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 1617 bytes --]

On Mon, 2 Mar 2015 15:44:26 +0100
Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:

> > 1) Buffer of named pipe gets full-filled by a lot of data written
> >   by slave side.
> > 2) WriteFile() in fhandler_pty_master::doecho(), which is called
> >   from master side by key input, is blocked because the buffer
> >   is full.
> > 3) If a handling to read from the pipe is in the same thread as
> >   key input, the thread falls into deadlock.
> > 
> > To check buffer space before WriteFile() is one idea,
> > but it is not smart, I suppose...
> 
> I think that's not it.  For testing I added code to convert the
> WriteFile calls in fhandler_pty_slave::write, fhandler_pty_master::doecho
> and fhandler_pty_slave::write to overlapped I/O and made sure to wait
> for the result after the output mutex has been released.
> 
> This change has no effect at all.  Looks like this needs some more
> digging.

Hmm.

To confirm my assumption, I have modified the TTY code
for testing. The modification is shown in an attached
diff-file against current CVS version. (Note that this
patch is not for fixing the problem. It is for just a
testing.)

With this modification, half of buffer is kept empty
for fhandler_pty_master::doecho(). I assumed the blocking
could be avoided because buffer is always free.

As a result of the test, it has become clear that this
modification conceals the problem. This means the problem
is closely related to occupancy of buffer.

Now, I suppose the cause has been clarified. So we have
to work out a solution. How can we resolve this problem?

-- 
Takashi Yano <takashi.yano@nifty.ne.jp>

[-- Attachment #2: cygwin-test.patch.20150304 --]
[-- Type: application/octet-stream, Size: 7665 bytes --]

Index: src/winsup/cygwin/fhandler.h
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/fhandler.h,v
retrieving revision 1.513
diff -u -p -r1.513 fhandler.h
--- src/winsup/cygwin/fhandler.h	24 Feb 2015 11:05:02 -0000	1.513
+++ src/winsup/cygwin/fhandler.h	4 Mar 2015 11:01:27 -0000
@@ -1512,6 +1512,7 @@ class fhandler_pty_common: public fhandl
 class fhandler_pty_slave: public fhandler_pty_common
 {
   HANDLE inuse;			// used to indicate that a tty is in use
+  HANDLE from_slave, to_slave;	// for testing
 
   /* Helper functions for fchmod and fchown. */
   bool fch_open_handles (bool chown);
Index: src/winsup/cygwin/fhandler_tty.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/fhandler_tty.cc,v
retrieving revision 1.290
diff -u -p -r1.290 fhandler_tty.cc
--- src/winsup/cygwin/fhandler_tty.cc	25 Feb 2015 16:46:57 -0000	1.290
+++ src/winsup/cygwin/fhandler_tty.cc	4 Mar 2015 11:01:27 -0000
@@ -42,6 +42,8 @@ struct pipe_request {
 struct pipe_reply {
   HANDLE from_master;
   HANDLE to_master;
+  HANDLE from_slave;
+  HANDLE to_slave;
   DWORD error;
 };
 
@@ -378,7 +380,8 @@ out:
 /* pty slave stuff */
 
 fhandler_pty_slave::fhandler_pty_slave (int unit)
-  : fhandler_pty_common (), inuse (NULL)
+  : fhandler_pty_common (), inuse (NULL),
+    from_slave (NULL), to_slave (NULL)
 {
   if (unit >= 0)
     dev ().parse (DEV_PTYS_MAJOR, unit);
@@ -388,10 +391,12 @@ int
 fhandler_pty_slave::open (int flags, mode_t)
 {
   HANDLE pty_owner, from_master_local, to_master_local;
+  HANDLE from_slave_local, to_slave_local;
   HANDLE *handles[] =
   {
     &from_master_local, &input_available_event, &input_mutex, &inuse,
     &output_mutex, &to_master_local, &pty_owner,
+    &from_slave_local, &to_slave_local,
     NULL
   };
 
@@ -500,6 +505,22 @@ fhandler_pty_slave::open (int flags, mod
 	  errmsg = "can't duplicate output, %E";
 	  goto err;
 	}
+      if (!DuplicateHandle (pty_owner, get_ttyp ()->from_slave (),
+			    GetCurrentProcess (), &from_slave_local, 0, TRUE,
+			    DUPLICATE_SAME_ACCESS))
+	{
+	  termios_printf ("can't duplicate master input from %u/%p, %E",
+			  get_ttyp ()->master_pid, get_ttyp ()->from_slave ());
+	  __seterrno ();
+	  goto err_no_msg;
+	}
+      if (!DuplicateHandle (pty_owner, get_ttyp ()->to_slave (),
+			  GetCurrentProcess (), &to_slave_local, 0, TRUE,
+			  DUPLICATE_SAME_ACCESS))
+	{
+	  errmsg = "can't duplicate master output, %E";
+	  goto err;
+	}
       if (pty_owner != GetCurrentProcess ())
 	CloseHandle (pty_owner);
     }
@@ -520,23 +541,39 @@ fhandler_pty_slave::open (int flags, mod
 	}
       from_master_local = repl.from_master;
       to_master_local = repl.to_master;
+      from_slave_local = repl.from_slave;
+      to_slave_local = repl.to_slave;
       if (!from_master_local || !to_master_local)
 	{
 	  SetLastError (repl.error);
 	  errmsg = "error duplicating pipes, %E";
 	  goto err;
 	}
+      if (!from_slave_local || !to_slave_local)
+	{
+	  SetLastError (repl.error);
+	  errmsg = "error duplicating master pipes, %E";
+	  goto err;
+	}
     }
   VerifyHandle (from_master_local);
   VerifyHandle (to_master_local);
+  VerifyHandle (from_slave_local);
+  VerifyHandle (to_slave_local);
 
   termios_printf ("duplicated from_master %p->%p from pty_owner",
 		  get_ttyp ()->from_master (), from_master_local);
   termios_printf ("duplicated to_master %p->%p from pty_owner",
 		  get_ttyp ()->to_master (), to_master_local);
+  termios_printf ("duplicated from_slave %p->%p from pty_owner",
+		  get_ttyp ()->from_slave (), from_slave_local);
+  termios_printf ("duplicated to_slave %p->%p from pty_owner",
+		  get_ttyp ()->to_slave (), to_slave_local);
 
   set_io_handle (from_master_local);
   set_output_handle (to_master_local);
+  from_slave = from_slave_local;
+  to_slave = to_slave_local;
 
   fhandler_console::need_invisible ();
   set_open_status ();
@@ -587,6 +624,10 @@ fhandler_pty_slave::close ()
     termios_printf ("CloseHandle (input_available_event<%p>), %E", input_available_event);
   if ((unsigned) myself->ctty == FHDEV (DEV_PTYS_MAJOR, get_minor ()))
     fhandler_console::free_console ();	/* assumes that we are the last pty closer */
+  if (!ForceCloseHandle (from_slave))
+    termios_printf ("error closing from_slave %p, %E", from_slave);
+  if (!ForceCloseHandle (to_slave))
+    termios_printf ("error closing to_slave %p, %E", to_slave);
   return fhandler_pty_common::close ();
 }
 
@@ -653,6 +694,28 @@ fhandler_pty_slave::write (const void *p
 
       while (tc ()->output_stopped)
 	cygwait (10);
+
+      /* for testing */
+      DWORD buflen;
+      if (!GetNamedPipeInfo (get_output_handle (), NULL, &buflen, NULL, NULL))
+	{
+	  termios_printf ("GetNamedPipeInfo(%p) failed, %E", get_output_handle ());
+	  buflen = fhandler_pty_common::pipesize;
+	}
+      DWORD occupied;
+      if (!PeekNamedPipe (from_slave, NULL, 0, NULL, &occupied, NULL))
+	{
+	  termios_printf ("PeekNamedPipe(%p) failed, %E", from_slave);
+	}
+      else
+	{
+	  while (n + occupied > buflen / 2)
+	    {
+	      cygwait (10);
+	      PeekNamedPipe (from_slave, NULL, 0, NULL, &occupied, NULL);
+	    }
+	}
+
       acquire_output_mutex (INFINITE);
 
       /* Previous write may have set write_error to != 0.  Check it here.
@@ -1597,6 +1660,20 @@ fhandler_pty_master::pty_master_thread (
 	      termios_printf ("DuplicateHandle (to_master), %E");
 	      goto reply;
 	    }
+	  if (!DuplicateHandle (GetCurrentProcess (), get_io_handle (),
+			       client, &repl.from_slave,
+			       0, TRUE, DUPLICATE_SAME_ACCESS))
+	    {
+	      termios_printf ("DuplicateHandle (from_slave), %E");
+	      goto reply;
+	    }
+	  if (!DuplicateHandle (GetCurrentProcess (), get_output_handle (),
+				client, &repl.to_slave,
+				0, TRUE, DUPLICATE_SAME_ACCESS))
+	    {
+	      termios_printf ("DuplicateHandle (to_slave), %E");
+	      goto reply;
+	    }
 	}
 reply:
       repl.error = GetLastError ();
@@ -1711,6 +1788,8 @@ fhandler_pty_master::setup ()
 
   t.set_from_master (from_master);
   t.set_to_master (to_master);
+  t.set_from_slave (get_io_handle ());
+  t.set_to_slave (get_output_handle ());
   t.winsize.ws_col = 80;
   t.winsize.ws_row = 25;
   t.master_pid = myself->pid;
Index: src/winsup/cygwin/tty.h
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/tty.h,v
retrieving revision 1.37
diff -u -p -r1.37 tty.h
--- src/winsup/cygwin/tty.h	23 Apr 2013 09:44:34 -0000	1.37
+++ src/winsup/cygwin/tty.h	4 Mar 2015 11:01:27 -0000
@@ -104,15 +104,29 @@ private:
     HANDLE _to_master;
     LARGE_INTEGER _tm_dummy;
   };
+  union {
+    HANDLE _from_slave;
+    LARGE_INTEGER _fs_dummy;
+  };
+  union {    
+    HANDLE _to_slave;
+    LARGE_INTEGER _ts_dummy;
+  };
 public:
   HANDLE from_master() const { return _from_master; }
   HANDLE to_master() const { return _to_master; }
+  HANDLE from_slave() const { return _from_slave; }
+  HANDLE to_slave() const { return _to_slave; }
 #ifdef __x86_64__
   void set_from_master (HANDLE h) { _from_master = h; }
   void set_to_master (HANDLE h) { _to_master = h; }
+  void set_from_slave (HANDLE h) { _from_slave = h; }
+  void set_to_slave (HANDLE h) { _to_slave = h; }
 #else
   void set_from_master (HANDLE h) { _fm_dummy.HighPart = 0; _from_master = h; }
   void set_to_master (HANDLE h) { _tm_dummy.HighPart = 0; _to_master = h; }
+  void set_from_slave (HANDLE h) { _fs_dummy.HighPart = 0; _from_slave = h; }
+  void set_to_slave (HANDLE h) { _ts_dummy.HighPart = 0; _to_slave = h; }
 #endif
 
   int read_retval;

[-- Attachment #3: Type: text/plain, Size: 218 bytes --]

--
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

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-03-04 11:36       ` Takashi Yano
@ 2015-03-04 12:43         ` Corinna Vinschen
  2015-03-04 18:22           ` Corinna Vinschen
  0 siblings, 1 reply; 29+ messages in thread
From: Corinna Vinschen @ 2015-03-04 12:43 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 2091 bytes --]

On Mar  4 20:34, Takashi Yano wrote:
> On Mon, 2 Mar 2015 15:44:26 +0100
> Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:
> 
> > > 1) Buffer of named pipe gets full-filled by a lot of data written
> > >   by slave side.
> > > 2) WriteFile() in fhandler_pty_master::doecho(), which is called
> > >   from master side by key input, is blocked because the buffer
> > >   is full.
> > > 3) If a handling to read from the pipe is in the same thread as
> > >   key input, the thread falls into deadlock.
> > > 
> > > To check buffer space before WriteFile() is one idea,
> > > but it is not smart, I suppose...
> > 
> > I think that's not it.  For testing I added code to convert the
> > WriteFile calls in fhandler_pty_slave::write, fhandler_pty_master::doecho
> > and fhandler_pty_slave::write to overlapped I/O and made sure to wait
> > for the result after the output mutex has been released.
> > 
> > This change has no effect at all.  Looks like this needs some more
> > digging.
> 
> Hmm.
> 
> To confirm my assumption, I have modified the TTY code
> for testing. The modification is shown in an attached
> diff-file against current CVS version. (Note that this
> patch is not for fixing the problem. It is for just a
> testing.)
> 
> With this modification, half of buffer is kept empty
> for fhandler_pty_master::doecho(). I assumed the blocking
> could be avoided because buffer is always free.
> 
> As a result of the test, it has become clear that this
> modification conceals the problem. This means the problem
> is closely related to occupancy of buffer.
> 
> Now, I suppose the cause has been clarified. So we have
> to work out a solution. How can we resolve this problem?

I'm not sure.  I still have to look deeper into that.  Locally
I treid to woraround this problem by calling WriteFile overlapped
without waiting for the result, but even that doesn't work.

Hmm,
Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-03-04 12:43         ` Corinna Vinschen
@ 2015-03-04 18:22           ` Corinna Vinschen
  2015-03-04 20:25             ` Corinna Vinschen
  2015-03-05 12:12             ` Takashi Yano
  0 siblings, 2 replies; 29+ messages in thread
From: Corinna Vinschen @ 2015-03-04 18:22 UTC (permalink / raw)
  To: cygwin


[-- Attachment #1.1: Type: text/plain, Size: 2782 bytes --]

Hi Takashi,

On Mar  4 13:19, Corinna Vinschen wrote:
> On Mar  4 20:34, Takashi Yano wrote:
> > On Mon, 2 Mar 2015 15:44:26 +0100
> > Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:
> > > > To check buffer space before WriteFile() is one idea,
> > > > but it is not smart, I suppose...
> > > 
> > > I think that's not it.  [....blah...]
> > [...]
> > As a result of the test, it has become clear that this
> > modification conceals the problem. This means the problem
> > is closely related to occupancy of buffer.
> > 
> > Now, I suppose the cause has been clarified. So we have
> > to work out a solution. How can we resolve this problem?
> 
> I'm not sure.  I still have to look deeper into that.  Locally
> I treid to woraround this problem by calling WriteFile overlapped
> without waiting for the result, but even that doesn't work.

Ok, the good news is, I have a potential workaround for this problem.
The bad news is, it might be just a bad hack.

The problem is apparently that the slave fills up the to_master buffer.
If the master doesn't constantly and fastly read the slave output, the
slave will hang a lot in the WriteFile call and the pipe buffer is most
of the time full.  When the master itself calls doecho, it has a rather
high probability that the slave is in a WriteFile call.  The master will
hang in acquire_output_mutex while the slave hangs in WriteFile.  Worse,
even when removing the acquire/release_output_mutex bracket, there's an
just as high probablity that the master will hang in the WriteFile call.

If the master process is not handling reading and writing from the pipe
in different threads, but just using a single-threaded select loop, the
fate of both processes is sealed.

The obvious culprit here is that the master side echos into the same
pipe write side the slave is writing to.  It occured to me that the
problem should disappear if we decouple echo output from slave output.
So the idea was that doecho should write into its own echo pipe and
fhandler_pty_master::process_slave_output as well as select's peek_pipe
both check for data in the echo pipe.

The result is the patch I attached to this mail.  I'm not sure it's the
most feasible way to solve this problem, but it works pretty nicely for
me, including pasting big chunks (I tried a clipboard with about 70K
of data) while yes(1) is running.

As a side effect, we can get rid of the acquire/release_output_mutex
bracketing which should speed up output slightly (but reading on the
master side is slightly slower now...)


Please have a look.


Thanks,
Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

[-- Attachment #1.2: x.diff --]
[-- Type: text/plain, Size: 5808 bytes --]

Index: fhandler.h
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/fhandler.h,v
retrieving revision 1.513
diff -u -p -r1.513 fhandler.h
--- fhandler.h	24 Feb 2015 11:05:02 -0000	1.513
+++ fhandler.h	4 Mar 2015 18:11:38 -0000
@@ -414,6 +414,7 @@ public:
   virtual HANDLE& get_io_handle () { return io_handle; }
   virtual HANDLE& get_output_handle () { return io_handle; }
   virtual HANDLE get_stat_handle () { return pc.handle () ?: io_handle; }
+  virtual HANDLE get_echo_handle () const { return NULL; }
   virtual bool hit_eof () {return false;}
   virtual select_record *select_read (select_stuff *);
   virtual select_record *select_write (select_stuff *);
@@ -1569,11 +1570,13 @@ class fhandler_pty_master: public fhandl
   HANDLE master_ctl;		// Control socket for handle duplication
   cygthread *master_thread;	// Master control thread
   HANDLE from_master, to_master;
+  HANDLE echo_r, echo_w;
   DWORD dwProcessId;		// Owner of master handles
 
 public:
   int need_nl;			// Next read should start with \n
 
+  HANDLE get_echo_handle () const { return echo_r; }
   /* Constructor */
   fhandler_pty_master (int);
 
Index: fhandler_tty.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/fhandler_tty.cc,v
retrieving revision 1.290
diff -u -p -r1.290 fhandler_tty.cc
--- fhandler_tty.cc	25 Feb 2015 16:46:57 -0000	1.290
+++ fhandler_tty.cc	4 Mar 2015 18:11:38 -0000
@@ -145,10 +145,8 @@ fhandler_pty_common::__release_output_mu
 void
 fhandler_pty_master::doecho (const void *str, DWORD len)
 {
-  acquire_output_mutex (INFINITE);
-  if (!WriteFile (to_master, str, len, &len, NULL))
-    termios_printf ("Write to %p failed, %E", to_master);
-  release_output_mutex ();
+  if (!WriteFile (echo_w, str, len, &len, NULL))
+    termios_printf ("Write to echo pipe failed, %E");
 }
 
 int
@@ -221,6 +219,7 @@ fhandler_pty_master::process_slave_outpu
   size_t rlen;
   char outbuf[OUT_BUFFER_SIZE + 1];
   DWORD n;
+  DWORD echo_cnt;
   int column = 0;
   int rc = 0;
 
@@ -257,9 +256,12 @@ fhandler_pty_master::process_slave_outpu
       if (rlen > sizeof outbuf)
 	rlen = sizeof outbuf;
 
-      n = 0;
+      n = echo_cnt = 0;
       for (;;)
 	{
+	  /* Check echo pipe first. */
+	  if (::bytes_available (echo_cnt, echo_r) && echo_cnt > 0)
+	    break;
 	  if (!bytes_available (n))
 	    goto err;
 	  if (n)
@@ -287,7 +289,12 @@ fhandler_pty_master::process_slave_outpu
 	  flush_to_slave ();
 	}
 
-      if (!ReadFile (get_handle (), outbuf, rlen, &n, NULL))
+      /* If echo pipe has data (something has been typed or pasted), prefer
+         it over slave output. */
+      if (echo_cnt > 0
+	  && ReadFile (echo_r, outbuf, MIN (rlen, echo_cnt), &n, NULL))
+	;
+      else if (!ReadFile (get_handle (), outbuf, rlen, &n, NULL))
 	{
 	  termios_printf ("ReadFile failed, %E");
 	  goto err;
@@ -653,7 +660,6 @@ fhandler_pty_slave::write (const void *p
 
       while (tc ()->output_stopped)
 	cygwait (10);
-      acquire_output_mutex (INFINITE);
 
       /* Previous write may have set write_error to != 0.  Check it here.
 	 This is less than optimal, but the alternative slows down pty
@@ -663,12 +669,10 @@ fhandler_pty_slave::write (const void *p
 	  set_errno (get_ttyp ()->write_error);
 	  towrite = -1;
 	  get_ttyp ()->write_error = 0;
-	  release_output_mutex ();
 	  break;
 	}
 
       BOOL res = WriteFile (get_output_handle (), buf, n, &n, NULL);
-      release_output_mutex ();
       if (!res)
 	{
 	  DWORD err = GetLastError ();
@@ -1228,7 +1232,7 @@ errout:
 fhandler_pty_master::fhandler_pty_master (int unit)
   : fhandler_pty_common (), pktmode (0), master_ctl (NULL),
     master_thread (NULL), from_master (NULL), to_master (NULL),
-    dwProcessId (0), need_nl (0)
+    echo_r (NULL), echo_w (NULL), dwProcessId (0), need_nl (0)
 {
   if (unit >= 0)
     dev ().parse (DEV_PTYM_MAJOR, unit);
@@ -1317,6 +1321,9 @@ fhandler_pty_master::close ()
   if (!ForceCloseHandle (to_master))
     termios_printf ("error closing from_master %p, %E", to_master);
   from_master = to_master = NULL;
+  ForceCloseHandle (echo_r);
+  ForceCloseHandle (echo_w);
+  echo_r = echo_w = NULL;
 
   fhandler_pty_common::close ();
 
@@ -1660,6 +1667,10 @@ fhandler_pty_master::setup ()
 
   ProtectHandle1 (get_io_handle (), from_pty);
 
+  __small_sprintf (pipename, "pty%d-echoloop", unit);
+  res = fhandler_pipe::create (&sec_none, &echo_r, &echo_w,
+			       fhandler_pty_common::pipesize, pipename, 0);
+
   /* Create security attribute.  Default permissions are 0620. */
   sd.malloc (sizeof (SECURITY_DESCRIPTOR));
   RtlCreateSecurityDescriptor (sd, SECURITY_DESCRIPTOR_REVISION);
@@ -1730,6 +1741,8 @@ err:
   close_maybe (input_mutex);
   close_maybe (from_master);
   close_maybe (to_master);
+  close_maybe (echo_r);
+  close_maybe (echo_w);
   close_maybe (master_ctl);
   termios_printf ("pty%d open failed - failed to create %s", unit, errstr);
   return false;
Index: select.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/select.cc,v
retrieving revision 1.223
diff -u -p -r1.223 select.cc
--- select.cc	11 Oct 2014 12:14:29 -0000	1.223
+++ select.cc	4 Mar 2015 18:11:38 -0000
@@ -626,6 +626,9 @@ peek_pipe (select_record *s, bool from_s
 	  goto out;
 	}
       int n = pipe_data_available (s->fd, fh, h, false);
+      /* On PTY masters, check if input from the echo pipe is available. */
+      if (n == 0 && fh->get_echo_handle ())
+	n = pipe_data_available (s->fd, fh, fh->get_echo_handle (), false);
 
       if (n < 0)
 	{

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-03-04 18:22           ` Corinna Vinschen
@ 2015-03-04 20:25             ` Corinna Vinschen
  2015-03-05 12:12             ` Takashi Yano
  1 sibling, 0 replies; 29+ messages in thread
From: Corinna Vinschen @ 2015-03-04 20:25 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 468 bytes --]

On Mar  4 19:18, Corinna Vinschen wrote:
> Hi Takashi,

Oh, btw.

I wouldn't be too unhappy if we could move the discussions about
Cygwin implementation details to the cygwin-developers mailing list.
The cygwin mailing list should be reserved for the more user-centric
stuff, me thinks.


Thanks,
Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-03-04 18:22           ` Corinna Vinschen
  2015-03-04 20:25             ` Corinna Vinschen
@ 2015-03-05 12:12             ` Takashi Yano
  2015-03-05 13:31               ` Corinna Vinschen
  1 sibling, 1 reply; 29+ messages in thread
From: Takashi Yano @ 2015-03-05 12:12 UTC (permalink / raw)
  To: cygwin

On Wed, 4 Mar 2015 19:18:57 +0100
Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:

> The result is the patch I attached to this mail.  I'm not sure it's the
> most feasible way to solve this problem, but it works pretty nicely for
> me, including pasting big chunks (I tried a clipboard with about 70K
> of data) while yes(1) is running.

Thank you, Corinna.

I have tried your patch. It nicely works for me, too.
And your workaround is definitely better than mine.

One small thing to be improved is here:

+      if (echo_cnt > 0
+	  && ReadFile (echo_r, outbuf, MIN (rlen, echo_cnt), &n, NULL))

echo_cnt returned by ::bytes_available() is actually
not a number of bytes available in the pipe. This is
because ::bytes_available() returns "nleft" instead
of "navail" when "nleft" is non-zero.

Therefore, "rlen" should be used here rather than
"MIN (rlen, echo_cnt)".

By the way, should we go to cygwin-developer mailing list?

-- 
Takashi Yano <takashi.yano@nifty.ne.jp>

--
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

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-03-05 12:12             ` Takashi Yano
@ 2015-03-05 13:31               ` Corinna Vinschen
  2015-04-03  4:07                 ` Takashi Yano
  0 siblings, 1 reply; 29+ messages in thread
From: Corinna Vinschen @ 2015-03-05 13:31 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 1445 bytes --]

On Mar  5 20:24, Takashi Yano wrote:
> On Wed, 4 Mar 2015 19:18:57 +0100
> Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:
> 
> > The result is the patch I attached to this mail.  I'm not sure it's the
> > most feasible way to solve this problem, but it works pretty nicely for
> > me, including pasting big chunks (I tried a clipboard with about 70K
> > of data) while yes(1) is running.
> 
> Thank you, Corinna.
> 
> I have tried your patch. It nicely works for me, too.
> And your workaround is definitely better than mine.
> 
> One small thing to be improved is here:
> 
> +      if (echo_cnt > 0
> +	  && ReadFile (echo_r, outbuf, MIN (rlen, echo_cnt), &n, NULL))
> 
> echo_cnt returned by ::bytes_available() is actually
> not a number of bytes available in the pipe. This is
> because ::bytes_available() returns "nleft" instead
> of "navail" when "nleft" is non-zero.
> 
> Therefore, "rlen" should be used here rather than
> "MIN (rlen, echo_cnt)".

Thanks, done.  I applied the patch now with two additional changes for
better error handling.

> By the way, should we go to cygwin-developer mailing list?

Nah, not for this one.  For the next bigger issue, that would be nice,
especially if you come up with code and stuff :)


Thanks,
Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-03-05 13:31               ` Corinna Vinschen
@ 2015-04-03  4:07                 ` Takashi Yano
  2015-04-03  4:19                   ` Takashi Yano
  2015-04-03 11:32                   ` Corinna Vinschen
  0 siblings, 2 replies; 29+ messages in thread
From: Takashi Yano @ 2015-04-03  4:07 UTC (permalink / raw)
  To: cygwin

On Thu, 5 Mar 2015 13:59:01 +0100
Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:

> > One small thing to be improved is here:
> > 
> > +      if (echo_cnt > 0
> > +	  && ReadFile (echo_r, outbuf, MIN (rlen, echo_cnt), &n, NULL))
> > 
> > echo_cnt returned by ::bytes_available() is actually
> > not a number of bytes available in the pipe. This is
> > because ::bytes_available() returns "nleft" instead
> > of "navail" when "nleft" is non-zero.
> > 
> > Therefore, "rlen" should be used here rather than
> > "MIN (rlen, echo_cnt)".
> 
> Thanks, done.  I applied the patch now with two additional changes for
> better error handling.

For the same reason, I propose the following patch.

2015-04-03  Takashi Yano  <takashi.yano@nifty.ne.jp>

	* fhandler_tty.cc (fhandler_pty_slave::read): Change calculation of
	"readlen" not to use "bytes_in_pype" value directly.

diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc
index 89cc9e5..daa24eb 100644
--- a/winsup/cygwin/fhandler_tty.cc
+++ b/winsup/cygwin/fhandler_tty.cc
@@ -742,7 +742,7 @@ fhandler_pty_slave::read (void *ptr, size_t& len)
 	  return;
 	}
 
-      readlen = MIN (bytes_in_pipe, MIN (len, sizeof (buf)));
+      readlen = bytes_in_pipe ? MIN (len, sizeof (buf)) : 0;
 
 #if 0
       /* Why on earth is the read length reduced to vmin, even if more bytes


-- 
Takashi Yano <takashi.yano@nifty.ne.jp>

--
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

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-04-03  4:07                 ` Takashi Yano
@ 2015-04-03  4:19                   ` Takashi Yano
  2015-04-03 11:32                   ` Corinna Vinschen
  1 sibling, 0 replies; 29+ messages in thread
From: Takashi Yano @ 2015-04-03  4:19 UTC (permalink / raw)
  To: cygwin

On Fri, 3 Apr 2015 13:07:35 +0900
Takashi Yano <takashi.yano@nifty.ne.jp> wrote:

> 2015-04-03  Takashi Yano  <takashi.yano@nifty.ne.jp>
> 
> 	* fhandler_tty.cc (fhandler_pty_slave::read): Change calculation of
> 	"readlen" not to use "bytes_in_pype" value directly.

s/pype/pipe/

Sorry.

-- 
Takashi Yano <takashi.yano@nifty.ne.jp>

--
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

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-04-03  4:07                 ` Takashi Yano
  2015-04-03  4:19                   ` Takashi Yano
@ 2015-04-03 11:32                   ` Corinna Vinschen
  2015-04-04  6:55                     ` Takashi Yano
  1 sibling, 1 reply; 29+ messages in thread
From: Corinna Vinschen @ 2015-04-03 11:32 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 2188 bytes --]

Hi Takashi,

On Apr  3 13:07, Takashi Yano wrote:
> On Thu, 5 Mar 2015 13:59:01 +0100
> Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:
> 
> > > One small thing to be improved is here:
> > > 
> > > +      if (echo_cnt > 0
> > > +	  && ReadFile (echo_r, outbuf, MIN (rlen, echo_cnt), &n, NULL))
> > > 
> > > echo_cnt returned by ::bytes_available() is actually
> > > not a number of bytes available in the pipe. This is
> > > because ::bytes_available() returns "nleft" instead
> > > of "navail" when "nleft" is non-zero.
> > > 
> > > Therefore, "rlen" should be used here rather than
> > > "MIN (rlen, echo_cnt)".
> > 
> > Thanks, done.  I applied the patch now with two additional changes for
> > better error handling.
> 
> For the same reason, I propose the following patch.
> 
> 2015-04-03  Takashi Yano  <takashi.yano@nifty.ne.jp>
> 
> 	* fhandler_tty.cc (fhandler_pty_slave::read): Change calculation of
> 	"readlen" not to use "bytes_in_pype" value directly.

Thanks, patch applied.

Btw., we have a regression in the latest PTY code in terms of some
native Windows tools.  I noticed this with `icacls':

With Cygwin 1.7.35:

  $ icacls xxx
  xxx VINSCHEN\corinna:(W,D,Rc,WDAC,WO,X,DC,RA)
      VINSCHEN\vinschen:(W,Rc,X,DC,RA)
      Everyone:(W,Rc,X,DC,RA)

  Successfully processed 1 files; Failed processing 0 files

With git HEAD:

  $ icacls xxx
  xxx VINSCHEN\corinna:(W,D,Rc,WDAC,WO,X,DC,RA)
						   VINSCHEN\vinschen:(W,Rc,X,DC,RA)
       Everyone:(W,Rc,X,DC,RA)

			      Successfully processed 1 files; Failed processing 0 files

This does not occur in a Windows console window, so it seems this has
been introduced by the PTY changes.

If you look into the output generated by icacls, you'll notice that it
only generates POSIXy LF line endings, not Windowsy CRLF.  The CRs
required to generate correct output are missing now for some reason, but
only for native, non-Cygwin clients.

Would you mind to have a look into this issue?


Thanks,
Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-04-03 11:32                   ` Corinna Vinschen
@ 2015-04-04  6:55                     ` Takashi Yano
  2015-04-04  8:43                       ` Corinna Vinschen
  0 siblings, 1 reply; 29+ messages in thread
From: Takashi Yano @ 2015-04-04  6:55 UTC (permalink / raw)
  To: cygwin

Hi Corinna,

On Fri, 3 Apr 2015 13:32:26 +0200
Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:

> Btw., we have a regression in the latest PTY code in terms of some
> native Windows tools.  I noticed this with `icacls':

To confirm this, I tried to build latest git version.
However, I have found that cygwin1.dll built above
does not work at all for me. With new cygwin1.dll,
mintty keeps black screen, i.e. no prompt appears.

It seems that this occurs after the following change.
Is replacing cygwin1.dll insufficient after this change?


commit 28e457cd717d630d6ac13dba7b8f2a162156effb
Author: Jon TURNEY <jon.turney@dronecode.org.uk>
Date:   Mon Mar 30 20:31:13 2015 +0100

    Provide ucontext to signal handlers

    Add ucontext.h header, defining ucontext_t and mcontext_t types.

    Provide sigaction sighandlers with a ucontext_t parameter, containing stack and
    context information.

        * include/sys/ucontext.h : New header.
        * include/ucontext.h : Ditto.
        * exceptions.cc (call_signal_handler): Provide ucontext_t
        parameter to signal handler function.

    Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>


-- 
Takashi Yano <takashi.yano@nifty.ne.jp>

--
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

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-04-04  6:55                     ` Takashi Yano
@ 2015-04-04  8:43                       ` Corinna Vinschen
  2015-04-05 11:54                         ` Takashi Yano
  0 siblings, 1 reply; 29+ messages in thread
From: Corinna Vinschen @ 2015-04-04  8:43 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 995 bytes --]

On Apr  4 15:55, Takashi Yano wrote:
> Hi Corinna,
> 
> On Fri, 3 Apr 2015 13:32:26 +0200
> Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:
> 
> > Btw., we have a regression in the latest PTY code in terms of some
> > native Windows tools.  I noticed this with `icacls':
> 
> To confirm this, I tried to build latest git version.
> However, I have found that cygwin1.dll built above
> does not work at all for me. With new cygwin1.dll,
> mintty keeps black screen, i.e. no prompt appears.
> 
> It seems that this occurs after the following change.

That should have been fixed by cbb9849fa76f1dbe6c66d91b68d9a10f46f1ba69.
You have to rebuild Cygwin to make this change have an effect.

Alternatively you could checkout f992ae6f4da99b6a200cfc146b96e8e921ca1e70
to ignore the ucontext stuff for now.


Thanks,
Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-04-04  8:43                       ` Corinna Vinschen
@ 2015-04-05 11:54                         ` Takashi Yano
  2015-04-07  9:11                           ` Corinna Vinschen
  0 siblings, 1 reply; 29+ messages in thread
From: Takashi Yano @ 2015-04-05 11:54 UTC (permalink / raw)
  To: cygwin

Hi Corinna,

On Sat, 4 Apr 2015 10:43:54 +0200
Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:

> That should have been fixed by cbb9849fa76f1dbe6c66d91b68d9a10f46f1ba69.
> You have to rebuild Cygwin to make this change have an effect.
> 
> Alternatively you could checkout f992ae6f4da99b6a200cfc146b96e8e921ca1e70
> to ignore the ucontext stuff for now.

Hmm, even after cbb9849fa76f1dbe6c66d91b68d9a10f46f1ba69,
it does not work in my environment.

But ok, f992ae6f4da99b6a200cfc146b96e8e921ca1e70 works.

Using f992ae6f4da99b6a200cfc146b96e8e921ca1e70, the problem
you had pointed out has been regenerated. Same problem can
be regenerated with a simple test case below.

#include <windows.h>

int main()
{
	HANDLE hCons;
	DWORD n;

	hCons = GetStdHandle(STD_OUTPUT_HANDLE);
	WriteFile(hCons, "AAAA\n", 5, &n, NULL);
	WriteFile(hCons, "BBBB\n", 5, &n, NULL);
	WriteFile(hCons, "CCCC\n", 5, &n, NULL);
	CloseHandle(hCons);
	return 0;
}

This is caused obviously by the patch I had proposed.
Post processing, in which \n is converted to \r\n, was in
the read process previously, so it had effect to the test
case above.

However, now the post processing is in the write process,
so it does not have effect against direct WriteFile() to
the pipe.

Unfortunately, I have no idea for the moment....

-- 
Takashi Yano <takashi.yano@nifty.ne.jp>

--
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

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-04-05 11:54                         ` Takashi Yano
@ 2015-04-07  9:11                           ` Corinna Vinschen
  2015-04-13 10:31                             ` Takashi Yano
  0 siblings, 1 reply; 29+ messages in thread
From: Corinna Vinschen @ 2015-04-07  9:11 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 2007 bytes --]

Hi Takashi,

On Apr  5 20:55, Takashi Yano wrote:
> Hi Corinna,
> 
> On Sat, 4 Apr 2015 10:43:54 +0200
> Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:
> 
> > That should have been fixed by cbb9849fa76f1dbe6c66d91b68d9a10f46f1ba69.
> > You have to rebuild Cygwin to make this change have an effect.
> > 
> > Alternatively you could checkout f992ae6f4da99b6a200cfc146b96e8e921ca1e70
> > to ignore the ucontext stuff for now.
> 
> Hmm, even after cbb9849fa76f1dbe6c66d91b68d9a10f46f1ba69,
> it does not work in my environment.
> 
> But ok, f992ae6f4da99b6a200cfc146b96e8e921ca1e70 works.
> 
> Using f992ae6f4da99b6a200cfc146b96e8e921ca1e70, the problem
> you had pointed out has been regenerated. Same problem can
> be regenerated with a simple test case below.
> 
> #include <windows.h>
> 
> int main()
> {
> 	HANDLE hCons;
> 	DWORD n;
> 
> 	hCons = GetStdHandle(STD_OUTPUT_HANDLE);
> 	WriteFile(hCons, "AAAA\n", 5, &n, NULL);
> 	WriteFile(hCons, "BBBB\n", 5, &n, NULL);
> 	WriteFile(hCons, "CCCC\n", 5, &n, NULL);
> 	CloseHandle(hCons);
> 	return 0;
> }
> 
> This is caused obviously by the patch I had proposed.
> Post processing, in which \n is converted to \r\n, was in
> the read process previously, so it had effect to the test
> case above.
> 
> However, now the post processing is in the write process,
> so it does not have effect against direct WriteFile() to
> the pipe.
> 
> Unfortunately, I have no idea for the moment....

The problem is that the patch shifted processing from the pty master to
the slave, but the slave isn't necessarily a well-behaved Cygwin process.

I think we should move opost processing back to the master side.  Would
it be much of a problem to restructure your patch to do that, without
re-introducing the old problems your patch fixed?


Thanks,
Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-04-07  9:11                           ` Corinna Vinschen
@ 2015-04-13 10:31                             ` Takashi Yano
  2015-04-14  7:35                               ` Corinna Vinschen
  0 siblings, 1 reply; 29+ messages in thread
From: Takashi Yano @ 2015-04-13 10:31 UTC (permalink / raw)
  To: cygwin

Hi Corinna,

I'm sorry for late reply.

On Tue, 7 Apr 2015 11:11:13 +0200
Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:

> I think we should move opost processing back to the master side.  Would
> it be much of a problem to restructure your patch to do that, without
> re-introducing the old problems your patch fixed?

I am considering of this issue for several days.
However, it is still with dificulty.

For my better understanding, may I ask a question?

At where does cygwin set the standard output handle
for native windows programs to fhandler_pty_slave::
output_handle?

Since I found SetStdHandle() calls in dtable.cc,
I tried to disable all of them. However, the output
of icacls still appears in mintty screen.

I wonder where the standard output handle is set.


By the way,

> Hmm, even after cbb9849fa76f1dbe6c66d91b68d9a10f46f1ba69,
> it does not work in my environment.

this problem has been gone after the following change.

commit 72f7cd89f230342107ec9e22fea38bf75bcb698d
Author: Jon TURNEY <jon.turney@dronecode.org.uk>
Date:   Sat Apr 4 23:31:03 2015 +0100

    Compile exceptions.cc with -fno-omit-frame-pointer on x86

    Selectively using -fomit-frame-pointer when -O is used doesn't make sense
    anymore, apparently since gcc 4.6, -O implies -fomit-frame-pointer.

    exceptions.cc must be compiled with -fno-omit-frame-pointer on x86, as it uses
    RtlCaptureContext, which requires a frame pointer.

        * Makefile.in : Remove setting -fomit-frame-pointer for compiling
        various files, it is already the default.  Set
        -fno-omit-frame-pointer for exceptions.cc on x86.

    Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>


-- 
Takashi Yano <takashi.yano@nifty.ne.jp>

--
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

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-04-13 10:31                             ` Takashi Yano
@ 2015-04-14  7:35                               ` Corinna Vinschen
  2015-04-16  0:26                                 ` Takashi Yano
  0 siblings, 1 reply; 29+ messages in thread
From: Corinna Vinschen @ 2015-04-14  7:35 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 1806 bytes --]

Hi Takashi,

On Apr 13 19:31, Takashi Yano wrote:
> Hi Corinna,
> 
> I'm sorry for late reply.

No worries.

> On Tue, 7 Apr 2015 11:11:13 +0200
> Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:
> 
> > I think we should move opost processing back to the master side.  Would
> > it be much of a problem to restructure your patch to do that, without
> > re-introducing the old problems your patch fixed?
> 
> I am considering of this issue for several days.
> However, it is still with dificulty.
> 
> For my better understanding, may I ask a question?
> 
> At where does cygwin set the standard output handle
> for native windows programs to fhandler_pty_slave::
> output_handle?

It doesn't.  The only way to set a handle for a native client is by
propagating the handle via execve.

And the native client, not knowing what he's talking to, recognizes the
output stream as a normal named pipe, if it's looking for that info at
all.  Being native, it will use native Windows MSVCRT stdio calls.
Worse, as you can see in the behaviour of some native applications, the
MSVCRT isatty() call returns 0 for named pipes.

If we have a Cygwin client, we can do all kinds of stuff on the slave
side, but as soon as we have a native client, only the master side of
the pty has any chance to do the right thing.  That's why I wrote that
we don't have the slave side under control.

Therefore we should really move the OPOST code back to the master side.
I'm reluctant to just revert your patch, though, because I think you
know better how to fix the OPOST code to make it work correctly on the
master side.


Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-04-14  7:35                               ` Corinna Vinschen
@ 2015-04-16  0:26                                 ` Takashi Yano
  2015-04-16  9:05                                   ` Corinna Vinschen
  0 siblings, 1 reply; 29+ messages in thread
From: Takashi Yano @ 2015-04-16  0:26 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 5341 bytes --]

Hi Corinna,

On Tue, 14 Apr 2015 09:34:56 +0200
Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:

> And the native client, not knowing what he's talking to, recognizes the
> output stream as a normal named pipe, if it's looking for that info at
> all.  Being native, it will use native Windows MSVCRT stdio calls.
> Worse, as you can see in the behaviour of some native applications, the
> MSVCRT isatty() call returns 0 for named pipes.
> 
> If we have a Cygwin client, we can do all kinds of stuff on the slave
> side, but as soon as we have a native client, only the master side of
> the pty has any chance to do the right thing.  That's why I wrote that
> we don't have the slave side under control.
> 
> Therefore we should really move the OPOST code back to the master side.
> I'm reluctant to just revert your patch, though, because I think you
> know better how to fix the OPOST code to make it work correctly on the
> master side.

So OPOST processing should be in master side for native windows program.
However, to solve the second problem I had pointed out in
http://cygwin.com/ml/cygwin/2015-02/msg00929.html ,
OPOST processing should be done on a timing when slave calls write().

To solve this antinomy, I have made a patch attached.

With this patch, new pipe is introduced to handle OPSOT-process separately
between native windows program and cygwin program.

Data from cygwin program is passed through the pipe newly introduced.
In this case, process_opost_output() is called in fhandler_pty_slave::write().
Master reads data, which is already applied OPOST process, from the
new pipe.

On the other hands, for native windows program, data is written into
conventional pipe. Master forwarding thread, which is also newly
introduced, reads conventional pipe and forward the data to the pipe
newly introduced by calling process_opost_output(). This makes OPOST
processing be done in master side.

I have confirmed that the both problem is fixed with this patch.

By the way,
I know that the names for the new pipe such as io_handle2, to_master2
and output_handle2 are ugly enough. Are there more appropriate names?


ChangeLog is as follows.


2015-04-16  Takashi Yano  <takashi.yano@nifty.ne.jp>

	* fhandler.h (class fhandler_base): Add virtual function get_io_handle2
	to get handle from which OPOST-processed output is read on PTY master.
	(class fhandler_pty_slave): Add variable output_handle2 to store handle
	for OPOST-processed output. Add two functions set_output_handle2() and
	get_output_handle2() regarding variable output_handle2. Now,
	output_handle (not 2) is used only by native windows program for
	OPOST-processing in master side. For cygwin process, output_handle2 is
	used for handling OPOST-processing in slave side.
	(class fhandler_pty_master): Add variables io_handle2 and to_master2 to
	store handles for OPOST-processed output. Add pty_master_fwd_thread and
	function pty_master_fwd_thread() for a thread which forwards data from
	io_handle to to_master2 applying OPOST-processing. Add function
	get_io_handle2() regarding variable io_handle2. Now, io_handle and
	to_master are used only by native windows program for OPOST-processing
	in master side. For cygwin process, io_handle2 and to_master2 are used
	for handling OPOST-processing in slave side.
	* fhandler_tty.cc (struct pipe_reply): Add member to_master2.
	(fhandler_pty_master::process_slave_output): Read slave output from
	io_handle2 rather than io_handle.
	(fhandler_pty_slave::fhandler_pty_salve): Initialize output_handle2.
	(fhandler_pty_slave::open): Set output_handle2 by duplicating handle
	to_master2 on PTY master.
	(fhandler_pty_slave::close): Close handle output_handle2.
	(fhandler_pty_slave::write): Write data to output_handle2 rather than
	output_handle.
	(fhandler_pty_slave::fch_close_handles): Close handle output_handle2.
	(fhandler_pty_master::fhandler_pty_master): Initialize io_handle2,
	to_master2 and master_fwd_thread.
	(fhandler_pty_master::cleanup): Clean up to_master2 as well.
	(fhandler_pty_master::close): Print to_master2 as well in debug
	message. Terminate master forwarding thread. Close handles to_master2
	and io_handle2.
	(fhandler_pty_master::ioctl): Use io_handle2 rather than to_master.
	(fhandler_pty_master::pty_master_thread): Add code for duplicating
	handle to_master2.
	(fhandler_pty_master::pty_master_fwd_thread): New function for
	a thread to forward OPOST-processed data from io_handle to to_master2.
	This thread applies OPOST-processing to the output of native windows
	program.
	(::pty_master_fwd_thread): Ditto.
	(fhandler_pty_master::setup): Create new pipe for OPOST-processed
	output. Create new thread to forward data from io_handle to to_master2.
	Set handle to_master2 to tty. Print io_handle2 as well in debug message.
	Close handles io_handle2 and to_master2 in case of error.
	(fhandler_pty_master::fixup_after_fork): Set handle to_master2 to tty.
	Copy handle to_master2 from arch->to_master2.
	(fhandler_pty_master::fixup_after_exec): Clean up to_master2.
	* select.cc: Check handle returned by get_io_handle2() rather than
	get_handle().
	* tty.h(class tty): Add variable _to_master2 to store handle to which
	OPOST-processed data is written. Add two functions to_master2() and
	set_to_master2() regarding _to_master2.


-- 
Takashi Yano <takashi.yano@nifty.ne.jp>

[-- Attachment #2: cygwin.patch.20150416-2 --]
[-- Type: application/octet-stream, Size: 13939 bytes --]

diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h
index 694c23b..6911277 100644
--- a/winsup/cygwin/fhandler.h
+++ b/winsup/cygwin/fhandler.h
@@ -412,6 +412,7 @@ public:
      that some fd's have two handles. */
   virtual HANDLE& get_handle () { return io_handle; }
   virtual HANDLE& get_io_handle () { return io_handle; }
+  virtual HANDLE& get_io_handle2 () { return io_handle; }
   virtual HANDLE& get_output_handle () { return io_handle; }
   virtual HANDLE get_stat_handle () { return pc.handle () ?: io_handle; }
   virtual HANDLE get_echo_handle () const { return NULL; }
@@ -1516,6 +1517,7 @@ class fhandler_pty_common: public fhandler_termios
 class fhandler_pty_slave: public fhandler_pty_common
 {
   HANDLE inuse;			// used to indicate that a tty is in use
+  HANDLE output_handle2;
 
   /* Helper functions for fchmod and fchown. */
   bool fch_open_handles (bool chown);
@@ -1526,6 +1528,9 @@ class fhandler_pty_slave: public fhandler_pty_common
   /* Constructor */
   fhandler_pty_slave (int);
 
+  void set_output_handle2 (HANDLE h) { output_handle2 = h; }
+  HANDLE& get_output_handle2 () { return output_handle2; }
+
   int open (int flags, mode_t mode = 0);
   void open_setup (int flags);
   ssize_t __stdcall write (const void *ptr, size_t len);
@@ -1575,13 +1580,17 @@ class fhandler_pty_master: public fhandler_pty_common
   HANDLE from_master, to_master;
   HANDLE echo_r, echo_w;
   DWORD dwProcessId;		// Owner of master handles
+  HANDLE io_handle2, to_master2;
+  cygthread *master_fwd_thread;	// Master forwarding thread
 
 public:
   HANDLE get_echo_handle () const { return echo_r; }
+  HANDLE& get_io_handle2 () { return io_handle2; }
   /* Constructor */
   fhandler_pty_master (int);
 
   DWORD pty_master_thread ();
+  DWORD pty_master_fwd_thread ();
   int process_slave_output (char *buf, size_t len, int pktmode_on);
   void doecho (const void *str, DWORD len);
   int accept_input ();
diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc
index ccb76d9..f319495 100644
--- a/winsup/cygwin/fhandler_tty.cc
+++ b/winsup/cygwin/fhandler_tty.cc
@@ -42,6 +42,7 @@ struct pipe_request {
 struct pipe_reply {
   HANDLE from_master;
   HANDLE to_master;
+  HANDLE to_master2;
   DWORD error;
 };
 
@@ -236,7 +237,7 @@ fhandler_pty_master::process_slave_output (char *buf, size_t len, int pktmode_on
 	  /* Check echo pipe first. */
 	  if (::bytes_available (echo_cnt, echo_r) && echo_cnt > 0)
 	    break;
-	  if (!bytes_available (n))
+	  if (!::bytes_available (n, get_io_handle2 ()))
 	    goto err;
 	  if (n)
 	    break;
@@ -297,7 +298,7 @@ fhandler_pty_master::process_slave_output (char *buf, size_t len, int pktmode_on
 	      goto err;
 	    }
 	}
-      else if (!ReadFile (get_handle (), outbuf, rlen, &n, NULL))
+      else if (!ReadFile (get_io_handle2 (), outbuf, rlen, &n, NULL))
 	{
 	  termios_printf ("ReadFile failed, %E");
 	  goto err;
@@ -332,7 +333,7 @@ out:
 /* pty slave stuff */
 
 fhandler_pty_slave::fhandler_pty_slave (int unit)
-  : fhandler_pty_common (), inuse (NULL)
+  : fhandler_pty_common (), inuse (NULL), output_handle2 (NULL)
 {
   if (unit >= 0)
     dev ().parse (DEV_PTYS_MAJOR, unit);
@@ -341,11 +342,11 @@ fhandler_pty_slave::fhandler_pty_slave (int unit)
 int
 fhandler_pty_slave::open (int flags, mode_t)
 {
-  HANDLE pty_owner, from_master_local, to_master_local;
+  HANDLE pty_owner, from_master_local, to_master_local, to_master2_local;
   HANDLE *handles[] =
   {
     &from_master_local, &input_available_event, &input_mutex, &inuse,
-    &output_mutex, &to_master_local, &pty_owner,
+    &output_mutex, &to_master_local, &pty_owner, &to_master2_local,
     NULL
   };
 
@@ -396,7 +397,8 @@ fhandler_pty_slave::open (int flags, mode_t)
     release_output_mutex ();
   }
 
-  if (!get_ttyp ()->from_master () || !get_ttyp ()->to_master ())
+  if (!get_ttyp ()->from_master () ||
+      !get_ttyp ()->to_master () || !get_ttyp ()->to_master2 ())
     {
       errmsg = "pty handles have been closed";
       set_errno (EACCES);
@@ -447,6 +449,13 @@ fhandler_pty_slave::open (int flags, mode_t)
 	  errmsg = "can't duplicate output, %E";
 	  goto err;
 	}
+      if (!DuplicateHandle (pty_owner, get_ttyp ()->to_master2 (),
+			  GetCurrentProcess (), &to_master2_local, 0, TRUE,
+			  DUPLICATE_SAME_ACCESS))
+	{
+	  errmsg = "can't duplicate output2, %E";
+	  goto err;
+	}
       if (pty_owner != GetCurrentProcess ())
 	CloseHandle (pty_owner);
     }
@@ -467,7 +476,8 @@ fhandler_pty_slave::open (int flags, mode_t)
 	}
       from_master_local = repl.from_master;
       to_master_local = repl.to_master;
-      if (!from_master_local || !to_master_local)
+      to_master2_local = repl.to_master2;
+      if (!from_master_local || !to_master_local || !to_master2_local)
 	{
 	  SetLastError (repl.error);
 	  errmsg = "error duplicating pipes, %E";
@@ -476,14 +486,18 @@ fhandler_pty_slave::open (int flags, mode_t)
     }
   VerifyHandle (from_master_local);
   VerifyHandle (to_master_local);
+  VerifyHandle (to_master2_local);
 
   termios_printf ("duplicated from_master %p->%p from pty_owner",
 		  get_ttyp ()->from_master (), from_master_local);
   termios_printf ("duplicated to_master %p->%p from pty_owner",
 		  get_ttyp ()->to_master (), to_master_local);
+  termios_printf ("duplicated to_master2 %p->%p from pty_owner",
+		  get_ttyp ()->to_master2 (), to_master2_local);
 
   set_io_handle (from_master_local);
   set_output_handle (to_master_local);
+  set_output_handle2 (to_master2_local);
 
   fhandler_console::need_invisible ();
   set_open_status ();
@@ -532,6 +546,9 @@ fhandler_pty_slave::close ()
     termios_printf ("CloseHandle (inuse), %E");
   if (!ForceCloseHandle (input_available_event))
     termios_printf ("CloseHandle (input_available_event<%p>), %E", input_available_event);
+  if (!ForceCloseHandle (get_output_handle2 ()))
+    termios_printf ("CloseHandle (get_output_handle ()<%p>), %E",
+	get_output_handle2 ());
   if ((unsigned) myself->ctty == FHDEV (DEV_PTYS_MAJOR, get_minor ()))
     fhandler_console::free_console ();	/* assumes that we are the last pty closer */
   return fhandler_pty_common::close ();
@@ -590,7 +607,7 @@ fhandler_pty_slave::write (const void *ptr, size_t len)
 
   push_process_state process_state (PID_TTYOU);
 
-  if (!process_opost_output (get_output_handle (), ptr, towrite, false))
+  if (!process_opost_output (get_output_handle2 (), ptr, towrite, false))
     {
       DWORD err = GetLastError ();
       termios_printf ("WriteFile failed, %E");
@@ -1068,6 +1085,7 @@ fhandler_pty_slave::fch_close_handles ()
 {
   close_maybe (get_io_handle ());
   close_maybe (get_output_handle ());
+  close_maybe (get_output_handle2 ());
   close_maybe (input_available_event);
   close_maybe (output_mutex);
   close_maybe (input_mutex);
@@ -1140,7 +1158,8 @@ errout:
 fhandler_pty_master::fhandler_pty_master (int unit)
   : fhandler_pty_common (), pktmode (0), master_ctl (NULL),
     master_thread (NULL), from_master (NULL), to_master (NULL),
-    echo_r (NULL), echo_w (NULL), dwProcessId (0)
+    echo_r (NULL), echo_w (NULL), dwProcessId (0),
+    io_handle2 (NULL), to_master2 (NULL), master_fwd_thread (NULL)
 {
   if (unit >= 0)
     dev ().parse (DEV_PTYM_MAJOR, unit);
@@ -1198,15 +1217,15 @@ fhandler_pty_master::cleanup ()
 {
   report_tty_counts (this, "closing master", "");
   if (archetype)
-    from_master = to_master = NULL;
+    from_master = to_master = to_master2 = NULL;
   fhandler_base::cleanup ();
 }
 
 int
 fhandler_pty_master::close ()
 {
-  termios_printf ("closing from_master(%p)/to_master(%p) since we own them(%u)",
-		  from_master, to_master, dwProcessId);
+  termios_printf ("closing from_master(%p)/to_master(%p)/to_master2(%p) since we own them(%u)",
+		  from_master, to_master, to_master2, dwProcessId);
   if (cygwin_finished_initializing)
     {
       if (master_ctl && get_ttyp ()->master_pid == myself->pid)
@@ -1229,6 +1248,7 @@ fhandler_pty_master::close ()
 	      master_ctl = NULL;
 	    }
 	  release_output_mutex ();
+	  master_fwd_thread->terminate_thread ();
 	}
     }
 
@@ -1245,6 +1265,11 @@ fhandler_pty_master::close ()
   if (!ForceCloseHandle (to_master))
     termios_printf ("error closing to_master %p, %E", to_master);
   from_master = to_master = NULL;
+  if (!ForceCloseHandle (get_io_handle2 ()))
+    termios_printf ("error closing io_handle2 %p, %E", get_io_handle2 ());
+  if (!ForceCloseHandle (to_master2))
+    termios_printf ("error closing to_master2 %p, %E", to_master2);
+  get_io_handle2 () = to_master2 = NULL;
   ForceCloseHandle (echo_r);
   ForceCloseHandle (echo_w);
   echo_r = echo_w = NULL;
@@ -1351,7 +1376,7 @@ fhandler_pty_master::ioctl (unsigned int cmd, void *arg)
     case FIONREAD:
       {
 	DWORD n;
-	if (!::bytes_available (n, to_master))
+	if (!::bytes_available (n, get_io_handle2 ()))
 	  {
 	    set_errno (EINVAL);
 	    return -1;
@@ -1521,6 +1546,13 @@ fhandler_pty_master::pty_master_thread ()
 	      termios_printf ("DuplicateHandle (to_master), %E");
 	      goto reply;
 	    }
+	  if (!DuplicateHandle (GetCurrentProcess (), to_master2,
+				client, &repl.to_master2,
+				0, TRUE, DUPLICATE_SAME_ACCESS))
+	    {
+	      termios_printf ("DuplicateHandle (to_master2), %E");
+	      goto reply;
+	    }
 	}
 reply:
       repl.error = GetLastError ();
@@ -1546,6 +1578,40 @@ pty_master_thread (VOID *arg)
   return ((fhandler_pty_master *) arg)->pty_master_thread ();
 }
 
+DWORD
+fhandler_pty_master::pty_master_fwd_thread ()
+{
+  DWORD rlen;
+  char outbuf[OUT_BUFFER_SIZE];
+
+  termios_printf("Started.");
+  for (;;)
+    {
+      if (!ReadFile (get_io_handle (), outbuf, sizeof outbuf, &rlen, NULL))
+	{
+	  termios_printf ("ReadFile for forwarding failed, %E");
+	  break;
+	}
+      ssize_t wlen = rlen;
+      while (rlen>0)
+	{
+	  if (!process_opost_output (to_master2, outbuf, wlen, false))
+	    {
+	      termios_printf ("WriteFile for forwarding failed, %E");
+	      break;
+	    }
+	  rlen -= wlen;
+	}
+    }
+  return 0;
+}
+
+static DWORD WINAPI
+pty_master_fwd_thread (VOID *arg)
+{
+  return ((fhandler_pty_master *) arg)->pty_master_fwd_thread ();
+}
+
 bool
 fhandler_pty_master::setup ()
 {
@@ -1582,6 +1648,15 @@ fhandler_pty_master::setup ()
       goto err;
     }
 
+  __small_sprintf (pipename, "pty%d-to-master2", unit);
+  res = fhandler_pipe::create (&sec_none, &get_io_handle2 (), &to_master2,
+			       fhandler_pty_common::pipesize, pipename, 0);
+  if (res)
+    {
+      errstr = "output pipe 2";
+      goto err;
+    }
+
   ProtectHandle1 (get_io_handle (), from_pty);
 
   __small_sprintf (pipename, "pty%d-echoloop", unit);
@@ -1640,28 +1715,37 @@ fhandler_pty_master::setup ()
       errstr = "pty master control thread";
       goto err;
     }
+  master_fwd_thread = new cygthread (::pty_master_fwd_thread, this, "ptym");
+  if (!master_fwd_thread)
+    {
+      errstr = "pty master forwarding thread";
+      goto err;
+    }
 
   t.set_from_master (from_master);
   t.set_to_master (to_master);
+  t.set_to_master2 (to_master2);
   t.winsize.ws_col = 80;
   t.winsize.ws_row = 25;
   t.master_pid = myself->pid;
 
   dev ().parse (DEV_PTYM_MAJOR, unit);
 
-  termios_printf ("this %p, pty%d opened - from_pty %p, to_pty %p", this, unit,
-		  get_io_handle (), get_output_handle ());
+  termios_printf ("this %p, pty%d opened - from_pty <%p,%p>, to_pty %p",
+	this, unit, get_io_handle (), get_io_handle2 (), get_output_handle ());
   return true;
 
 err:
   __seterrno ();
   close_maybe (get_io_handle ());
+  close_maybe (get_io_handle2 ());
   close_maybe (get_output_handle ());
   close_maybe (input_available_event);
   close_maybe (output_mutex);
   close_maybe (input_mutex);
   close_maybe (from_master);
   close_maybe (to_master);
+  close_maybe (to_master2);
   close_maybe (echo_r);
   close_maybe (echo_w);
   close_maybe (master_ctl);
@@ -1681,11 +1765,13 @@ fhandler_pty_master::fixup_after_fork (HANDLE parent)
 	{
 	  t.set_from_master (arch->from_master);
 	  t.set_to_master (arch->to_master);
+	  t.set_to_master2 (arch->to_master2);
 	}
       arch->dwProcessId = wpid;
     }
   from_master = arch->from_master;
   to_master = arch->to_master;
+  to_master2 = arch->to_master2;
   report_tty_counts (this, "inherited master", "");
 }
 
@@ -1695,7 +1781,7 @@ fhandler_pty_master::fixup_after_exec ()
   if (!close_on_exec ())
     fixup_after_fork (spawn_info->parent);
   else
-    from_master = to_master = NULL;
+    from_master = to_master = to_master2 = NULL;
 }
 
 BOOL
diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc
index 1706c87..1b65280 100644
--- a/winsup/cygwin/select.cc
+++ b/winsup/cygwin/select.cc
@@ -80,7 +80,7 @@ details. */
 #define copyfd_set(to, from, n) memcpy (to, from, sizeof_fd_set (n));
 
 #define set_handle_or_return_if_not_open(h, s) \
-  h = (s)->fh->get_handle (); \
+  h = (s)->fh->get_io_handle2 (); \
   if (cygheap->fdtab.not_open ((s)->fd)) \
     { \
       (s)->thread_errno =  EBADF; \
@@ -1264,7 +1264,7 @@ fhandler_base::select_read (select_stuff *ss)
       s->startup = no_startup;
       s->verify = verify_ok;
     }
-  s->h = get_handle ();
+  s->h = get_io_handle2 ();
   s->read_selected = true;
   s->read_ready = true;
   return s;
diff --git a/winsup/cygwin/tty.h b/winsup/cygwin/tty.h
index 27d43f7..cf3508a 100644
--- a/winsup/cygwin/tty.h
+++ b/winsup/cygwin/tty.h
@@ -92,12 +92,15 @@ public:
 private:
   HANDLE _from_master;
   HANDLE _to_master;
+  HANDLE _to_master2;
 
 public:
   HANDLE from_master() const { return _from_master; }
   HANDLE to_master() const { return _to_master; }
+  HANDLE to_master2() const { return _to_master2; }
   void set_from_master (HANDLE h) { _from_master = h; }
   void set_to_master (HANDLE h) { _to_master = h; }
+  void set_to_master2 (HANDLE h) { _to_master2 = h; }
 
   int read_retval;
   bool was_opened;	/* True if opened at least once. */

[-- Attachment #3: Type: text/plain, Size: 218 bytes --]

--
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

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-04-16  0:26                                 ` Takashi Yano
@ 2015-04-16  9:05                                   ` Corinna Vinschen
  2015-04-16  9:10                                     ` Corinna Vinschen
  2015-04-17 11:27                                     ` Takashi Yano
  0 siblings, 2 replies; 29+ messages in thread
From: Corinna Vinschen @ 2015-04-16  9:05 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 3147 bytes --]

Hi Takashi,

On Apr 16 09:26, Takashi Yano wrote:
> Hi Corinna,
> 
> On Tue, 14 Apr 2015 09:34:56 +0200
> Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:
> 
> > And the native client, not knowing what he's talking to, recognizes the
> > output stream as a normal named pipe, if it's looking for that info at
> > all.  Being native, it will use native Windows MSVCRT stdio calls.
> > Worse, as you can see in the behaviour of some native applications, the
> > MSVCRT isatty() call returns 0 for named pipes.
> > 
> > If we have a Cygwin client, we can do all kinds of stuff on the slave
> > side, but as soon as we have a native client, only the master side of
> > the pty has any chance to do the right thing.  That's why I wrote that
> > we don't have the slave side under control.
> > 
> > Therefore we should really move the OPOST code back to the master side.
> > I'm reluctant to just revert your patch, though, because I think you
> > know better how to fix the OPOST code to make it work correctly on the
> > master side.
> 
> So OPOST processing should be in master side for native windows program.
> However, to solve the second problem I had pointed out in
> http://cygwin.com/ml/cygwin/2015-02/msg00929.html ,
> OPOST processing should be done on a timing when slave calls write().
> 
> To solve this antinomy, I have made a patch attached.
> 
> With this patch, new pipe is introduced to handle OPSOT-process separately
> between native windows program and cygwin program.
> 
> Data from cygwin program is passed through the pipe newly introduced.
> In this case, process_opost_output() is called in fhandler_pty_slave::write().
> Master reads data, which is already applied OPOST process, from the
> new pipe.
> 
> On the other hands, for native windows program, data is written into
> conventional pipe. Master forwarding thread, which is also newly
> introduced, reads conventional pipe and forward the data to the pipe
> newly introduced by calling process_opost_output(). This makes OPOST
> processing be done in master side.
> 
> I have confirmed that the both problem is fixed with this patch.

Ok, but... this is a really big patch and it complicates the pty code
even more.  Is there really no other option as far as the TCSADRAIN
problem is concerned?

What strikes me as weird is that neither fhandler_pty_slave::tcsetattr
nor fhandler_pty_master::tcsetattr give a damn for the optional_actions
parameter.  They simply overwrite the tc settings.  So I'm wondering,
wouldn't it be possible to add code to the tcsetattr implementation
instead, so that TCSADRAIN/TCSAFLUSH are honored and than only have one
place for OPOST handling?

> By the way,
> I know that the names for the new pipe such as io_handle2, to_master2
> and output_handle2 are ugly enough. Are there more appropriate names?

What about renaming io_handle to io_handle_nat and io_handle2 to io_handle
or io_handle_cyg?


Thanks,
Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-04-16  9:05                                   ` Corinna Vinschen
@ 2015-04-16  9:10                                     ` Corinna Vinschen
  2015-04-17 11:27                                     ` Takashi Yano
  1 sibling, 0 replies; 29+ messages in thread
From: Corinna Vinschen @ 2015-04-16  9:10 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 2051 bytes --]

On Apr 16 11:05, Corinna Vinschen wrote:
> Hi Takashi,
> 
> On Apr 16 09:26, Takashi Yano wrote:
> > So OPOST processing should be in master side for native windows program.
> > However, to solve the second problem I had pointed out in
> > http://cygwin.com/ml/cygwin/2015-02/msg00929.html ,
> > OPOST processing should be done on a timing when slave calls write().
> > 
> > To solve this antinomy, I have made a patch attached.
> > 
> > With this patch, new pipe is introduced to handle OPSOT-process separately
> > between native windows program and cygwin program.
> > 
> > Data from cygwin program is passed through the pipe newly introduced.
> > In this case, process_opost_output() is called in fhandler_pty_slave::write().
> > Master reads data, which is already applied OPOST process, from the
> > new pipe.
> > 
> > On the other hands, for native windows program, data is written into
> > conventional pipe. Master forwarding thread, which is also newly
> > introduced, reads conventional pipe and forward the data to the pipe
> > newly introduced by calling process_opost_output(). This makes OPOST
> > processing be done in master side.
> > 
> > I have confirmed that the both problem is fixed with this patch.
> 
> Ok, but... this is a really big patch and it complicates the pty code
> even more.  Is there really no other option as far as the TCSADRAIN
> problem is concerned?
> 
> What strikes me as weird is that neither fhandler_pty_slave::tcsetattr
> nor fhandler_pty_master::tcsetattr give a damn for the optional_actions
> parameter.  They simply overwrite the tc settings.  So I'm wondering,
> wouldn't it be possible to add code to the tcsetattr implementation
> instead, so that TCSADRAIN/TCSAFLUSH are honored and than only have one
> place for OPOST handling?

...and additionally don't have to maintain yet another handle.


Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-04-16  9:05                                   ` Corinna Vinschen
  2015-04-16  9:10                                     ` Corinna Vinschen
@ 2015-04-17 11:27                                     ` Takashi Yano
  2015-04-17 12:10                                       ` Corinna Vinschen
  1 sibling, 1 reply; 29+ messages in thread
From: Takashi Yano @ 2015-04-17 11:27 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 3343 bytes --]

Hi Corinna,

On Thu, 16 Apr 2015 11:05:33 +0200
Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:

> Ok, but... this is a really big patch and it complicates the pty code
> even more.  Is there really no other option as far as the TCSADRAIN
> problem is concerned?
> 
> What strikes me as weird is that neither fhandler_pty_slave::tcsetattr
> nor fhandler_pty_master::tcsetattr give a damn for the optional_actions
> parameter.  They simply overwrite the tc settings.  So I'm wondering,
> wouldn't it be possible to add code to the tcsetattr implementation
> instead, so that TCSADRAIN/TCSAFLUSH are honored and than only have one
> place for OPOST handling?

I also think the patch was a big deal. However, I did not have
any other good idea.

Anyway, I have worked out another solution. Please find a patch
attached.

What do you think of this one?

OPOST code has been now completely moved back to master side as
with original implementation.

With this patch, tcsetattr() waits until master reads all data
in pipe before new attributes are applied to preserve the order
between write() and tcsetattr().

However, there is a potential risk in which tcsetattr() can be
blocked if master stops reading pipe, even though I can not imagine
such a likely situation.

Moreover, it is necessary to duplicate io_handle from master-side
to slave-side to allow slave to peek master pipe. It is not smart
enough, I suppose.


ChageLog is as follows.

2015-04-17  Takashi Yano  <takashi.yano@nifty.ne.jp>

	* fhandler.h (fhandler_pty_common): Remove function
	process_opost_output (). Since processing regarding OPOST is moved back
	to master side, this function is needed no more.
	(class fhandler_pty_slave): Add variable 'from_slave' for checking
	whether master input pipe is empty. This used by flandler_pty_slave
	::tcsetattr().
	(class fhandler_pty_master): Move variable 'column' for handling ONOCR
	from class tty to class fhandler_pty_master. Revive variable 'need_nl'
	which is used by OPOST-processing in master side.
	* fhandler_tty.cc (struct pipe_reply): Add member 'from_slave'.
	(fhandler_pty_master::doecho): Call WriteFile() instead of
	fhandler_pty_common::process_opost_output().
	(fhandler_pty_master::process_slave_output): Move OPOST-processing back
	into this function.
	(fhandler_pty_slave::fhandler_pty_slave): Initialize 'from_slave'.
	(fhandler_pty_slave::open): Duplicate handle regarding 'from_slave'.
	(fhandler_pty_slave::close): Close handle 'from_slave'.
	(fhandler_pty_slave::write): Call WriteFile() instead of
	fhandler_pty_common::process_opost_output().
	(fhandler_pty_slave::tcsetattr): Wait until master reads all data from
	slave.
	(fhandler_pty_slave::fhandler_pty_slave): Initialize 'column' and
	'need_nl'.
	(fhandler_pty_master::pty_master_thread): Add code to duplicate handle
	regarding 'from_slave'.
	(fhandler_pty_master::setup): Set io_handle to tty::_from_slave.
	(fhandler_pty_common::process_opost_output): Remove this function.
	* select.cc (peek_pipe): Revive the code checking 'need_nl'.
	* tty.cc (tty::init): Remove initialization for 'column'.
	* tty.h (class tty): Add variable '_from_slave'. Add two functions
	from_slave() and set_from_slave() regarding '_from_master'. Remove
	variable 'column'. It is moved to class fhandler_pty_master.



-- 
Takashi Yano <takashi.yano@nifty.ne.jp>

[-- Attachment #2: cygwin.patch.20150417-2 --]
[-- Type: application/octet-stream, Size: 14335 bytes --]

diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h
index 694c23b..53f01dc 100644
--- a/winsup/cygwin/fhandler.h
+++ b/winsup/cygwin/fhandler.h
@@ -1508,14 +1508,12 @@ class fhandler_pty_common: public fhandler_termios
     copyto (fh);
     return fh;
   }
-
- protected:
-  BOOL process_opost_output (HANDLE h, const void *ptr, ssize_t& len, bool is_echo);
 };
 
 class fhandler_pty_slave: public fhandler_pty_common
 {
   HANDLE inuse;			// used to indicate that a tty is in use
+  HANDLE from_slave;
 
   /* Helper functions for fchmod and fchown. */
   bool fch_open_handles (bool chown);
@@ -1575,8 +1573,11 @@ class fhandler_pty_master: public fhandler_pty_common
   HANDLE from_master, to_master;
   HANDLE echo_r, echo_w;
   DWORD dwProcessId;		// Owner of master handles
+  int column;	/* Current Column */
 
 public:
+  int need_nl;			// Next read should start with \n
+
   HANDLE get_echo_handle () const { return echo_r; }
   /* Constructor */
   fhandler_pty_master (int);
diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc
index ccb76d9..91d3958 100644
--- a/winsup/cygwin/fhandler_tty.cc
+++ b/winsup/cygwin/fhandler_tty.cc
@@ -42,6 +42,7 @@ struct pipe_request {
 struct pipe_reply {
   HANDLE from_master;
   HANDLE to_master;
+  HANDLE from_slave;
   DWORD error;
 };
 
@@ -145,8 +146,7 @@ fhandler_pty_common::__release_output_mutex (const char *fn, int ln)
 void
 fhandler_pty_master::doecho (const void *str, DWORD len)
 {
-  ssize_t towrite = len;
-  if (!process_opost_output (echo_w, str, towrite, true))
+  if (!WriteFile (echo_w, str, len, &len, NULL))
     termios_printf ("Write to echo pipe failed, %E");
 }
 
@@ -228,6 +228,46 @@ fhandler_pty_master::process_slave_output (char *buf, size_t len, int pktmode_on
   if (len == 0)
     goto out;
 
+  /* Set RLEN to the number of bytes to read from the pipe.  */
+  rlen = len;
+
+  char *optr;
+  optr = buf;
+  if (pktmode_on && buf)
+    {
+      *optr++ = TIOCPKT_DATA;
+      rlen -= 1;
+      rc++;
+    }
+
+  if (rlen == 0)
+    goto out;
+
+  if (need_nl)
+    {
+      /* We need to return a left over \n character, resulting from
+	 \r\n conversion.  Note that we already checked for FLUSHO and
+	 output_stopped at the time that we read the character, so we
+	 don't check again here.  */
+      if (buf)
+	*optr++ = '\n';
+      need_nl = 0;
+      rc++;
+      goto out;
+    }
+
+  if (get_ttyp ()->ti.c_oflag & OPOST && get_ttyp ()->ti.c_oflag & ONLCR)
+    {
+      /* We are going to expand \n to \r\n, so don't read more than
+	 half of the number of bytes requested.  */
+      rlen /= 2;
+      if (rlen == 0)
+	rlen = 1;
+    }
+
+  if (rlen > sizeof outbuf)
+    rlen = sizeof outbuf;
+
   for (;;)
     {
       n = echo_cnt = 0;
@@ -267,26 +307,6 @@ fhandler_pty_master::process_slave_output (char *buf, size_t len, int pktmode_on
 	  flush_to_slave ();
 	}
 
-      /* Set RLEN to the number of bytes to read from the pipe.  */
-      rlen = len;
-
-      char *optr;
-      optr = buf;
-      if (pktmode_on && buf)
-	{
-	  *optr++ = TIOCPKT_DATA;
-	  rlen -= 1;
-	}
-
-      if (rlen == 0)
-	{
-	  rc = optr - buf;
-	  goto out;
-	}
-
-      if (rlen > sizeof outbuf)
-	rlen = sizeof outbuf;
-
       /* If echo pipe has data (something has been typed or pasted), prefer
          it over slave output. */
       if (echo_cnt > 0)
@@ -308,8 +328,58 @@ fhandler_pty_master::process_slave_output (char *buf, size_t len, int pktmode_on
       if (get_ttyp ()->ti.c_lflag & FLUSHO || !buf)
 	continue;
 
-      memcpy (optr, outbuf, n);
-      optr += n;
+      if (!(get_ttyp ()->ti.c_oflag & OPOST))	// raw output mode
+	{
+	  memcpy (optr, outbuf, n);
+	  optr += n;
+	}
+      else					// post-process output
+	{
+	  char *iptr = outbuf;
+
+	  while (n--)
+	    {
+	      switch (*iptr)
+		{
+		case '\r':
+		  if ((get_ttyp ()->ti.c_oflag & ONOCR) && column == 0)
+		    {
+		      iptr++;
+		      continue;
+		    }
+		  if (get_ttyp ()->ti.c_oflag & OCRNL)
+		    *iptr = '\n';
+		  else
+		    column = 0;
+		  break;
+		case '\n':
+		  if (get_ttyp ()->ti.c_oflag & ONLCR)
+		    {
+		      *optr++ = '\r';
+		      column = 0;
+		    }
+		  if (get_ttyp ()->ti.c_oflag & ONLRET)
+		    column = 0;
+		  break;
+		default:
+		  column++;
+		  break;
+		}
+
+	      /* Don't store data past the end of the user's buffer.  This
+		 can happen if the user requests a read of 1 byte when
+		 doing \r\n expansion.  */
+	      if (optr - buf >= (int) len)
+		{
+		  if (*iptr != '\n' || n != 0)
+		    system_printf ("internal error: %u unexpected characters", n);
+		  need_nl = 1;
+		  break;
+		}
+
+	      *optr++ = *iptr++;
+	    }
+	}
       rc = optr - buf;
       break;
 
@@ -332,7 +402,7 @@ out:
 /* pty slave stuff */
 
 fhandler_pty_slave::fhandler_pty_slave (int unit)
-  : fhandler_pty_common (), inuse (NULL)
+  : fhandler_pty_common (), inuse (NULL), from_slave (NULL)
 {
   if (unit >= 0)
     dev ().parse (DEV_PTYS_MAJOR, unit);
@@ -341,11 +411,11 @@ fhandler_pty_slave::fhandler_pty_slave (int unit)
 int
 fhandler_pty_slave::open (int flags, mode_t)
 {
-  HANDLE pty_owner, from_master_local, to_master_local;
+  HANDLE pty_owner, from_master_local, to_master_local, from_slave_local;
   HANDLE *handles[] =
   {
     &from_master_local, &input_available_event, &input_mutex, &inuse,
-    &output_mutex, &to_master_local, &pty_owner,
+    &output_mutex, &to_master_local, &from_slave_local, &pty_owner,
     NULL
   };
 
@@ -447,6 +517,15 @@ fhandler_pty_slave::open (int flags, mode_t)
 	  errmsg = "can't duplicate output, %E";
 	  goto err;
 	}
+      if (!DuplicateHandle (pty_owner, get_ttyp ()->from_slave (),
+			    GetCurrentProcess (), &from_slave_local, 0, TRUE,
+			    DUPLICATE_SAME_ACCESS))
+	{
+	  termios_printf ("can't duplicate from_slave from %u/%p, %E",
+			  get_ttyp ()->master_pid, get_ttyp ()->from_slave ());
+	  __seterrno ();
+	  goto err_no_msg;
+	}
       if (pty_owner != GetCurrentProcess ())
 	CloseHandle (pty_owner);
     }
@@ -467,7 +546,8 @@ fhandler_pty_slave::open (int flags, mode_t)
 	}
       from_master_local = repl.from_master;
       to_master_local = repl.to_master;
-      if (!from_master_local || !to_master_local)
+      from_slave_local = repl.from_slave;
+      if (!from_master_local || !to_master_local || !from_slave_local)
 	{
 	  SetLastError (repl.error);
 	  errmsg = "error duplicating pipes, %E";
@@ -476,14 +556,18 @@ fhandler_pty_slave::open (int flags, mode_t)
     }
   VerifyHandle (from_master_local);
   VerifyHandle (to_master_local);
+  VerifyHandle (from_slave_local);
 
   termios_printf ("duplicated from_master %p->%p from pty_owner",
 		  get_ttyp ()->from_master (), from_master_local);
   termios_printf ("duplicated to_master %p->%p from pty_owner",
 		  get_ttyp ()->to_master (), to_master_local);
+  termios_printf ("duplicated from_slave %p->%p from pty_owner",
+		  get_ttyp ()->from_master (), from_slave_local);
 
   set_io_handle (from_master_local);
   set_output_handle (to_master_local);
+  from_slave = from_slave_local;
 
   fhandler_console::need_invisible ();
   set_open_status ();
@@ -532,6 +616,8 @@ fhandler_pty_slave::close ()
     termios_printf ("CloseHandle (inuse), %E");
   if (!ForceCloseHandle (input_available_event))
     termios_printf ("CloseHandle (input_available_event<%p>), %E", input_available_event);
+  if (!ForceCloseHandle (from_slave))
+    termios_printf ("CloseHandle (from_slave), %E");
   if ((unsigned) myself->ctty == FHDEV (DEV_PTYS_MAJOR, get_minor ()))
     fhandler_console::free_console ();	/* assumes that we are the last pty closer */
   return fhandler_pty_common::close ();
@@ -580,6 +666,7 @@ fhandler_pty_slave::init (HANDLE h, DWORD a, mode_t)
 ssize_t __stdcall
 fhandler_pty_slave::write (const void *ptr, size_t len)
 {
+  DWORD n;
   ssize_t towrite = len;
 
   bg_check_types bg = bg_check (SIGTTOU);
@@ -590,19 +677,44 @@ fhandler_pty_slave::write (const void *ptr, size_t len)
 
   push_process_state process_state (PID_TTYOU);
 
-  if (!process_opost_output (get_output_handle (), ptr, towrite, false))
+  while (len)
     {
-      DWORD err = GetLastError ();
-      termios_printf ("WriteFile failed, %E");
-      switch (err)
+      n = MIN (OUT_BUFFER_SIZE, len);
+      char *buf = (char *)ptr;
+      ptr = (char *) ptr + n;
+      len -= n;
+
+      if (tc ()->output_stopped && is_nonblocking ())
+        {
+	  if (len < (size_t)towrite)
+	    towrite -= len;
+	  else
+	    {
+	      set_errno(EAGAIN);
+	      towrite = -1;
+	    }
+	  break;
+        }
+
+      while (tc ()->output_stopped)
+	cygwait (10);
+
+      BOOL res = WriteFile (get_output_handle (), buf, n, &n, NULL);
+      if (!res)
 	{
-	case ERROR_NO_DATA:
-	  err = ERROR_IO_DEVICE;
-	default:
-	  __seterrno_from_win_error (err);
+	  DWORD err = GetLastError ();
+	  termios_printf ("WriteFile failed, %E");
+	  switch (err)
+	    {
+	    case ERROR_NO_DATA:
+	      err = ERROR_IO_DEVICE;
+	    default:
+	      __seterrno_from_win_error (err);
+	    }
+	  raise (SIGHUP);		/* FIXME: Should this be SIGTTOU? */
+	  towrite = -1;
+	  break;
 	}
-      raise (SIGHUP);		/* FIXME: Should this be SIGTTOU? */
-      towrite = -1;
     }
   return towrite;
 }
@@ -868,6 +980,9 @@ fhandler_pty_slave::tcgetattr (struct termios *t)
 int
 fhandler_pty_slave::tcsetattr (int, const struct termios *t)
 {
+  DWORD n;
+  while (::bytes_available (n, from_slave) && n)
+    cygwait (10);
   acquire_output_mutex (INFINITE);
   get_ttyp ()->ti = *t;
   release_output_mutex ();
@@ -1140,7 +1255,7 @@ errout:
 fhandler_pty_master::fhandler_pty_master (int unit)
   : fhandler_pty_common (), pktmode (0), master_ctl (NULL),
     master_thread (NULL), from_master (NULL), to_master (NULL),
-    echo_r (NULL), echo_w (NULL), dwProcessId (0)
+    echo_r (NULL), echo_w (NULL), dwProcessId (0), column (0), need_nl (0)
 {
   if (unit >= 0)
     dev ().parse (DEV_PTYM_MAJOR, unit);
@@ -1521,6 +1636,13 @@ fhandler_pty_master::pty_master_thread ()
 	      termios_printf ("DuplicateHandle (to_master), %E");
 	      goto reply;
 	    }
+	  if (!DuplicateHandle (GetCurrentProcess (), get_io_handle (),
+			       client, &repl.from_slave,
+			       0, TRUE, DUPLICATE_SAME_ACCESS))
+	    {
+	      termios_printf ("DuplicateHandle (from_slave), %E");
+	      goto reply;
+	    }
 	}
 reply:
       repl.error = GetLastError ();
@@ -1643,6 +1765,7 @@ fhandler_pty_master::setup ()
 
   t.set_from_master (from_master);
   t.set_to_master (to_master);
+  t.set_from_slave (get_io_handle ());
   t.winsize.ws_col = 80;
   t.winsize.ws_row = 25;
   t.master_pid = myself->pid;
@@ -1681,6 +1804,7 @@ fhandler_pty_master::fixup_after_fork (HANDLE parent)
 	{
 	  t.set_from_master (arch->from_master);
 	  t.set_to_master (arch->to_master);
+	  t.set_from_slave (arch->get_io_handle ());
 	}
       arch->dwProcessId = wpid;
     }
@@ -1697,93 +1821,3 @@ fhandler_pty_master::fixup_after_exec ()
   else
     from_master = to_master = NULL;
 }
-
-BOOL
-fhandler_pty_common::process_opost_output (HANDLE h, const void *ptr, ssize_t& len, bool is_echo)
-{
-  ssize_t towrite = len;
-  BOOL res = TRUE;
-  while (towrite)
-    {
-      if (!is_echo)
-	{
-	  if (tc ()->output_stopped && is_nonblocking ())
-	    {
-	      if (towrite < len)
-		break;
-	      else
-		{
-		  set_errno(EAGAIN);
-		  len = -1;
-		  return TRUE;
-		}
-	    }
-	  while (tc ()->output_stopped)
-	    cygwait (10);
-	}
-
-      if (!(get_ttyp ()->ti.c_oflag & OPOST))	// raw output mode
-	{
-	  DWORD n = MIN (OUT_BUFFER_SIZE, towrite);
-	  res = WriteFile (h, ptr, n, &n, NULL);
-	  if (!res)
-	    break;
-	  ptr = (char *) ptr + n;
-	  towrite -= n;
-	}
-      else					// post-process output
-	{
-	  char outbuf[OUT_BUFFER_SIZE + 1];
-	  char *buf = (char *)ptr;
-	  DWORD n = 0;
-	  ssize_t rc = 0;
-	  acquire_output_mutex (INFINITE);
-	  while (n < OUT_BUFFER_SIZE && rc < towrite)
-	    {
-	      switch (buf[rc])
-		{
-		case '\r':
-		  if ((get_ttyp ()->ti.c_oflag & ONOCR)
-		      && get_ttyp ()->column == 0)
-		    {
-		      rc++;
-		      continue;
-		    }
-		  if (get_ttyp ()->ti.c_oflag & OCRNL)
-		    {
-		      outbuf[n++] = '\n';
-		      rc++;
-		    }
-		  else
-		    {
-		      outbuf[n++] = buf[rc++];
-		      get_ttyp ()->column = 0;
-		    }
-		  break;
-		case '\n':
-		  if (get_ttyp ()->ti.c_oflag & ONLCR)
-		    {
-		      outbuf[n++] = '\r';
-		      get_ttyp ()->column = 0;
-		    }
-		  if (get_ttyp ()->ti.c_oflag & ONLRET)
-		    get_ttyp ()->column = 0;
-		  outbuf[n++] = buf[rc++];
-		  break;
-		default:
-		  outbuf[n++] = buf[rc++];
-		  get_ttyp ()->column++;
-		  break;
-		}
-	    }
-	  release_output_mutex ();
-	  res = WriteFile (h, outbuf, n, &n, NULL);
-	  if (!res)
-	    break;
-	  ptr = (char *) ptr + rc;
-	  towrite -= rc;
-	}
-    }
-  len -= towrite;
-  return res;
-}
diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc
index 1706c87..17a32a3 100644
--- a/winsup/cygwin/select.cc
+++ b/winsup/cygwin/select.cc
@@ -604,6 +604,11 @@ peek_pipe (select_record *s, bool from_select)
 	  {
 	    fhandler_pty_master *fhm = (fhandler_pty_master *) fh;
 	    fhm->flush_to_slave ();
+	    if (fhm->need_nl)
+	      {
+		gotone = s->read_ready = true;
+		goto out;
+	      }
 	  }
 	  break;
 	default:
diff --git a/winsup/cygwin/tty.cc b/winsup/cygwin/tty.cc
index 3f1077d..af616d6 100644
--- a/winsup/cygwin/tty.cc
+++ b/winsup/cygwin/tty.cc
@@ -237,7 +237,6 @@ tty::init ()
   was_opened = false;
   master_pid = 0;
   is_console = false;
-  column = 0;
 }
 
 HANDLE
diff --git a/winsup/cygwin/tty.h b/winsup/cygwin/tty.h
index 27d43f7..c2a387e 100644
--- a/winsup/cygwin/tty.h
+++ b/winsup/cygwin/tty.h
@@ -92,16 +92,18 @@ public:
 private:
   HANDLE _from_master;
   HANDLE _to_master;
+  HANDLE _from_slave;
 
 public:
   HANDLE from_master() const { return _from_master; }
   HANDLE to_master() const { return _to_master; }
+  HANDLE from_slave() const { return _from_slave; }
   void set_from_master (HANDLE h) { _from_master = h; }
   void set_to_master (HANDLE h) { _to_master = h; }
+  void set_from_slave (HANDLE h) { _from_slave = h; }
 
   int read_retval;
   bool was_opened;	/* True if opened at least once. */
-  int column;	/* Current Column */
 
   void init ();
   HANDLE open_inuse (ACCESS_MASK access);

[-- Attachment #3: Type: text/plain, Size: 218 bytes --]

--
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

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-04-17 11:27                                     ` Takashi Yano
@ 2015-04-17 12:10                                       ` Corinna Vinschen
  2015-04-17 12:25                                         ` Corinna Vinschen
  2015-04-20 11:40                                         ` Takashi Yano
  0 siblings, 2 replies; 29+ messages in thread
From: Corinna Vinschen @ 2015-04-17 12:10 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 3179 bytes --]

Hi Takashi,

On Apr 17 20:27, Takashi Yano wrote:
> Hi Corinna,
> 
> On Thu, 16 Apr 2015 11:05:33 +0200
> Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:
> 
> > Ok, but... this is a really big patch and it complicates the pty code
> > even more.  Is there really no other option as far as the TCSADRAIN
> > problem is concerned?
> > 
> > What strikes me as weird is that neither fhandler_pty_slave::tcsetattr
> > nor fhandler_pty_master::tcsetattr give a damn for the optional_actions
> > parameter.  They simply overwrite the tc settings.  So I'm wondering,
> > wouldn't it be possible to add code to the tcsetattr implementation
> > instead, so that TCSADRAIN/TCSAFLUSH are honored and than only have one
> > place for OPOST handling?
> 
> I also think the patch was a big deal. However, I did not have
> any other good idea.
> 
> Anyway, I have worked out another solution. Please find a patch
> attached.
> 
> What do you think of this one?

Looks better to me.   However:

> @@ -868,6 +980,9 @@ fhandler_pty_slave::tcgetattr (struct termios *t)
>  int
>  fhandler_pty_slave::tcsetattr (int, const struct termios *t)
>  {
> +  DWORD n;
> +  while (::bytes_available (n, from_slave) && n)
> +    cygwait (10);
>    acquire_output_mutex (INFINITE);
>    get_ttyp ()->ti = *t;
>    release_output_mutex ();

Shouldn't this loop be skipped in TCSANOW mode?

> OPOST code has been now completely moved back to master side as
> with original implementation.
> 
> With this patch, tcsetattr() waits until master reads all data
> in pipe before new attributes are applied to preserve the order
> between write() and tcsetattr().
> 
> However, there is a potential risk in which tcsetattr() can be
> blocked if master stops reading pipe, even though I can not imagine
> such a likely situation.

Yeah, but it is a busy wait.  Hmm.  Also, on second thought, the above
loop checks for bytes_available every time and changes n.  So, if
another slave writes lots of data, wouldn't the slave calling tcsetattr
starve?

IIUC, what you'd really like to know is something else.  It's not about
having n > 0 bytes in the pipe, but on calling tcsetattr, you'd like to
know how much bytes are in the pipe at this very moment, and then you'd
overwrite the termios info as soon as these n bytes are written.  That
sounds pretty different to me.

It would be cool if the slave-side tcsetattr only transmits the
optional_actions and the new termios content to the master, and the
master keeps it stashed away together with the number of bytes in the
pipe right now.  Then in, say, process_slave_output, it checks if the
precondition is fulfilled and only then overwrites its termios
structure.

Off the top of my head I'm not sure how feasible this is.  One way to do
that *may* be to send the info in the normal write pipe to the master.
What we need then would be a method to identify such a tcsetattr packet
in the input stream.

Other ideas?


Thanks,
Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-04-17 12:10                                       ` Corinna Vinschen
@ 2015-04-17 12:25                                         ` Corinna Vinschen
  2015-04-20 11:40                                         ` Takashi Yano
  1 sibling, 0 replies; 29+ messages in thread
From: Corinna Vinschen @ 2015-04-17 12:25 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 3049 bytes --]

On Apr 17 14:10, Corinna Vinschen wrote:
> On Apr 17 20:27, Takashi Yano wrote:
> > @@ -868,6 +980,9 @@ fhandler_pty_slave::tcgetattr (struct termios *t)
> >  int
> >  fhandler_pty_slave::tcsetattr (int, const struct termios *t)
> >  {
> > +  DWORD n;
> > +  while (::bytes_available (n, from_slave) && n)
> > +    cygwait (10);
> >    acquire_output_mutex (INFINITE);
> >    get_ttyp ()->ti = *t;
> >    release_output_mutex ();
> 
> Shouldn't this loop be skipped in TCSANOW mode?
> 
> > OPOST code has been now completely moved back to master side as
> > with original implementation.
> > 
> > With this patch, tcsetattr() waits until master reads all data
> > in pipe before new attributes are applied to preserve the order
> > between write() and tcsetattr().
> > 
> > However, there is a potential risk in which tcsetattr() can be
> > blocked if master stops reading pipe, even though I can not imagine
> > such a likely situation.
> 
> Yeah, but it is a busy wait.  Hmm.  Also, on second thought, the above
> loop checks for bytes_available every time and changes n.  So, if
> another slave writes lots of data, wouldn't the slave calling tcsetattr
> starve?
> 
> IIUC, what you'd really like to know is something else.  It's not about
> having n > 0 bytes in the pipe, but on calling tcsetattr, you'd like to
> know how much bytes are in the pipe at this very moment, and then you'd
> overwrite the termios info as soon as these n bytes are written.  That
> sounds pretty different to me.
> 
> It would be cool if the slave-side tcsetattr only transmits the
> optional_actions and the new termios content to the master, and the
> master keeps it stashed away together with the number of bytes in the
> pipe right now.  Then in, say, process_slave_output, it checks if the
> precondition is fulfilled and only then overwrites its termios
> structure.
> 
> Off the top of my head I'm not sure how feasible this is.  One way to do
> that *may* be to send the info in the normal write pipe to the master.
> What we need then would be a method to identify such a tcsetattr packet
> in the input stream.
> 
> Other ideas?

Maybe your idea to introduce a second pipe wasn't that bad after all...

So, instead of using it for Cygwin slave I/O (which makes me cringe a
bit), it could be used as a command channel to the master.  Since only
Cygwin executables would understand this concept anyway, it's ok that
native applications don't know about it.  This pipe could then be used
to transmit tcsetattr info to the master, and the master could apply the
change when it sees fit.  Maybe we even realize it could be used for
something else in future.  Ctrl-S/Ctrl-Q processing might be nice, say.

What do you think?

I'm sorry if I let you jump through hoops here, but I'm not really
sure about the best solution either :}


Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-04-17 12:10                                       ` Corinna Vinschen
  2015-04-17 12:25                                         ` Corinna Vinschen
@ 2015-04-20 11:40                                         ` Takashi Yano
  2015-04-20 15:12                                           ` Corinna Vinschen
  1 sibling, 1 reply; 29+ messages in thread
From: Takashi Yano @ 2015-04-20 11:40 UTC (permalink / raw)
  To: cygwin

Hi Corinna,

On Fri, 17 Apr 2015 14:10:52 +0200
Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:

> > @@ -868,6 +980,9 @@ fhandler_pty_slave::tcgetattr (struct termios *t)
> >  int
> >  fhandler_pty_slave::tcsetattr (int, const struct termios *t)
> >  {
> > +  DWORD n;
> > +  while (::bytes_available (n, from_slave) && n)
> > +    cygwait (10);
> >    acquire_output_mutex (INFINITE);
> >    get_ttyp ()->ti = *t;
> >    release_output_mutex ();
> 
> Shouldn't this loop be skipped in TCSANOW mode?

In Linux (Debian), TCSANOW and TCSADRAIN seem to behave in the same way
for PTY. In other words, both of them do not affect the data already
written, even if master does not read them yet. So I think that skipping
the loop for TCSANOW is not necessary.

> IIUC, what you'd really like to know is something else.  It's not about
> having n > 0 bytes in the pipe, but on calling tcsetattr, you'd like to
> know how much bytes are in the pipe at this very moment, and then you'd
> overwrite the termios info as soon as these n bytes are written.  That
> sounds pretty different to me.

You are right. If the slave is only one, both are same. However, they are
quite different when more than one slave exists.

On Fri, 17 Apr 2015 14:25:42 +0200
Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:

> Maybe your idea to introduce a second pipe wasn't that bad after all...
> 
> So, instead of using it for Cygwin slave I/O (which makes me cringe a
> bit), it could be used as a command channel to the master.  Since only
> Cygwin executables would understand this concept anyway, it's ok that
> native applications don't know about it.  This pipe could then be used
> to transmit tcsetattr info to the master, and the master could apply the
> change when it sees fit.  Maybe we even realize it could be used for
> something else in future.  Ctrl-S/Ctrl-Q processing might be nice, say.
> 
> What do you think?

For implementation of this idea, the application of c_oflag should be
queued and postponed until master-side reads the data written before
tcsetattr(). However, application of other members in struct termios
should not be postponed because they affect PTY input.

Furthermore, tcgetattr() should return the latest values set by
tcsetattr(), even if the application of c_oflag is still postponed.

After all, this implementation does not sound also very simple. This
complicated situation is caused because OPOST processing is placed in
master-read-side and it has a delay.

By any chance, my first implementation may be simpler.


-- 
Takashi Yano <takashi.yano@nifty.ne.jp>

--
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

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
  2015-04-20 11:40                                         ` Takashi Yano
@ 2015-04-20 15:12                                           ` Corinna Vinschen
  0 siblings, 0 replies; 29+ messages in thread
From: Corinna Vinschen @ 2015-04-20 15:12 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 3082 bytes --]

On Apr 20 20:40, Takashi Yano wrote:
> Hi Corinna,
> 
> On Fri, 17 Apr 2015 14:10:52 +0200
> Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:
> 
> > > @@ -868,6 +980,9 @@ fhandler_pty_slave::tcgetattr (struct termios *t)
> > >  int
> > >  fhandler_pty_slave::tcsetattr (int, const struct termios *t)
> > >  {
> > > +  DWORD n;
> > > +  while (::bytes_available (n, from_slave) && n)
> > > +    cygwait (10);
> > >    acquire_output_mutex (INFINITE);
> > >    get_ttyp ()->ti = *t;
> > >    release_output_mutex ();
> > 
> > Shouldn't this loop be skipped in TCSANOW mode?
> 
> In Linux (Debian), TCSANOW and TCSADRAIN seem to behave in the same way
> for PTY. In other words, both of them do not affect the data already
> written, even if master does not read them yet. So I think that skipping
> the loop for TCSANOW is not necessary.
> 
> > IIUC, what you'd really like to know is something else.  It's not about
> > having n > 0 bytes in the pipe, but on calling tcsetattr, you'd like to
> > know how much bytes are in the pipe at this very moment, and then you'd
> > overwrite the termios info as soon as these n bytes are written.  That
> > sounds pretty different to me.
> 
> You are right. If the slave is only one, both are same. However, they are
> quite different when more than one slave exists.
> 
> On Fri, 17 Apr 2015 14:25:42 +0200
> Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:
> 
> > Maybe your idea to introduce a second pipe wasn't that bad after all...
> > 
> > So, instead of using it for Cygwin slave I/O (which makes me cringe a
> > bit), it could be used as a command channel to the master.  Since only
> > Cygwin executables would understand this concept anyway, it's ok that
> > native applications don't know about it.  This pipe could then be used
> > to transmit tcsetattr info to the master, and the master could apply the
> > change when it sees fit.  Maybe we even realize it could be used for
> > something else in future.  Ctrl-S/Ctrl-Q processing might be nice, say.
> > 
> > What do you think?
> 
> For implementation of this idea, the application of c_oflag should be
> queued and postponed until master-side reads the data written before
> tcsetattr(). However, application of other members in struct termios
> should not be postponed because they affect PTY input.
> 
> Furthermore, tcgetattr() should return the latest values set by
> tcsetattr(), even if the application of c_oflag is still postponed.
> 
> After all, this implementation does not sound also very simple. This
> complicated situation is caused because OPOST processing is placed in
> master-read-side and it has a delay.
> 
> By any chance, my first implementation may be simpler.

Ok.  Let's go with that.  Can you please rename handle2/master2 to
handle_cyg/master_cyg and resend the patch to the cygwin-patches
mailing list?


Thanks,
Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread

end of thread, other threads:[~2015-04-20 15:12 UTC | newest]

Thread overview: 29+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-28 12:40 Cygwin hangs up if several keys are typed during outputting a lot of texts Takashi Yano
2015-02-28 13:16 ` Denis Excoffier
2015-02-28 17:56 ` Corinna Vinschen
2015-03-02 11:45   ` Takashi Yano
2015-03-02 14:44     ` Corinna Vinschen
2015-03-02 14:50       ` Corinna Vinschen
2015-03-04 11:36       ` Takashi Yano
2015-03-04 12:43         ` Corinna Vinschen
2015-03-04 18:22           ` Corinna Vinschen
2015-03-04 20:25             ` Corinna Vinschen
2015-03-05 12:12             ` Takashi Yano
2015-03-05 13:31               ` Corinna Vinschen
2015-04-03  4:07                 ` Takashi Yano
2015-04-03  4:19                   ` Takashi Yano
2015-04-03 11:32                   ` Corinna Vinschen
2015-04-04  6:55                     ` Takashi Yano
2015-04-04  8:43                       ` Corinna Vinschen
2015-04-05 11:54                         ` Takashi Yano
2015-04-07  9:11                           ` Corinna Vinschen
2015-04-13 10:31                             ` Takashi Yano
2015-04-14  7:35                               ` Corinna Vinschen
2015-04-16  0:26                                 ` Takashi Yano
2015-04-16  9:05                                   ` Corinna Vinschen
2015-04-16  9:10                                     ` Corinna Vinschen
2015-04-17 11:27                                     ` Takashi Yano
2015-04-17 12:10                                       ` Corinna Vinschen
2015-04-17 12:25                                         ` Corinna Vinschen
2015-04-20 11:40                                         ` Takashi Yano
2015-04-20 15:12                                           ` Corinna Vinschen

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).