public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
From: Jay K <jayk123@hotmail.com>
To: "cygwin@sourceware.org" <cygwin@sourceware.org>
Subject: Re:  proc_waiter: error on read of child wait pipe 0x0, Win32 error 6
Date: Thu, 13 Jan 2022 06:40:49 +0000	[thread overview]
Message-ID: <MWHPR1401MB195147B622BB5A90492E577AE6539@MWHPR1401MB1951.namprd14.prod.outlook.com> (raw)
In-Reply-To: <MWHPR1401MB195104100F4D135F78351B86E6529@MWHPR1401MB1951.namprd14.prod.outlook.com>

I don't know why I didn't get the reply in email, but this is representative of the real world code.

 - Jay


From: Jay K <jayk123@hotmail.com>
Sent: Wednesday, January 12, 2022 6:27 AM
To: cygwin@sourceware.org <cygwin@sourceware.org>
Subject: Re: proc_waiter: error on read of child wait pipe 0x0, Win32 error 6 
 
Ok, here is a small demonstration of the problem.

#include <stdlib.h> 
#include <stdio.h>
#include <windows.h>

unsigned __stdcall thread(void* p)
{
  unsigned i;
  for (i = 0; i < 100; ++i)
   system("./a.exe");
  return 0;
}

int main()
{
unsigned i;
HANDLE threads[100] = {0};
FILE* f = fopen("a.c", "w");
fprintf(f, "int main() { return 0; }\n");
fclose(f);

system("g++ a.c");

for (i = 0; i < 100; ++i)
 threads[i] = CreateThread(0, 0, thread, 0,0,0);

for (i = 0; i < 100; ++i)
 WaitForSingleObject(threads[i], -1);

}

$ ./1.exe 
      0 [main] sh 9287 C:\cygwin64\bin\sh.exe: *** fatal error - internal error reading the windows environment - too many environment variables?
                                                  3001 [main] sh 9287 cygwin_exception::open_stackdumpfile: Dumping stack trace to sh.exe.stackdump
                                                       0 [main] sh 9286 C:\cygwin64\bin\sh.exe: *** fatal error - internal error reading the windows environment - too many environment variables?
                                                                                                Stack trace:
Frame        Function    Args
000FFFFCD30  00180061C6E (001802795F0, 00180269E81, 00000000000, 000FFFFBB20)
000FFFFCD30  0018004849A (00000000228, 00800000160, 00000000000, 000FFFFCD30)
000FFFFCD30  001800484D2 (00000000000, 00000000000, 00000000000, 00000000000)
000FFFFCD30  0018005F12D (00180158C19, 00000000000, 00000000000, 000FFFFCD30)
000FFFFCD30  00180103AE4 (00000000000, 00000000000, 00000000000, 00000000000)
000FFFFCD30  00180048BC2 (00000000000, 00000000000, 00000000000, 00000000000)
000FFFFFFF0  00180047746 (00000000000, 00000000000, 00000000000, 00000000000)
000FFFFFFF0  001800477F4 (00000000000, 00000000000, 00000000000, 00000000000)
End of stack trace
                        0 [waitproc] 1 9269 proc_waiter: error on read of child wait pipe 0x0, Win32 error 6
             1078 [waitproc] 1 9269 proc_waiter: error on read of child wait pipe 0x0, Win32 error 6
     4452 [waitproc] 1 9269 proc_waiter: error on read of child wait pipe 0x0, Win32 error 6
                                                                                            sh: ./a.exe: Bad address
  11522 [waitproc] 1 9269 proc_waiter: error on read of child wait pipe 0x0, Win32 error 6
                                                                                          sh: ./a.exe: Bad address
sh: ./a.exe: Bad address
  38623 [waitproc] 1 9269 proc_waiter: error on read of child wait pipe 0x0, Win32 error 6
                                                                                            48009 [waitproc] 1 9269 proc_waiter: error on read of child wait pipe 0x0, Win32 error 6
                                                                                    48660 [waitproc] 1 9269 proc_waiter: error on read of child wait pipe 0x0, Win32 error 6
                                                                            49909 [waitproc] 1 9269 proc_waiter: error on read of child wait pipe 0x0, Win32 error 6


I understand I can workaround this, in that the use of threads is silly.

Is this invalid, to mix Win32 threads with cygwin system()?

 - Jay


From: Jay K <jayk123@hotmail.com>
Sent: Wednesday, January 12, 2022 5:57 AM
To: cygwin@sourceware.org <cygwin@sourceware.org>
Subject: Re: proc_waiter: error on read of child wait pipe 0x0, Win32 error 6 
 
Um, I know this isn't (yet) diligent/scientific, but must system create this thread?

#0  0x00007ff811e09e47 in KERNEL32!CreateThread () from /cygdrive/c/WINDOWS/System32/KERNEL32.DLL 
#1  0x00000001800468eb in cygthread::create() () from /usr/bin/cygwin1.dll
#2  0x000000018010645f in pinfo::wait() () from /usr/bin/cygwin1.dll
#3  0x000000018012e562 in proc_subproc(unsigned int, unsigned long) () from /usr/bin/cygwin1.dll
#4  0x0000000180134e85 in child_info_spawn::worker(char const*, char const* const*, char const* const*, int, int, int) () from /usr/bin/cygwin1.dll
#5  0x0000000180136729 in spawnve () from /usr/bin/cygwin1.dll
#6  0x0000000180136d05 in spawnvp () from /usr/bin/cygwin1.dll
#7  0x0000000180144683 in system () from /usr/bin/cygwin1.dll
#8  0x000000018018effb in _sigfe () from /usr/bin/cygwin1.dll
#9  0x000000010052884b in QMachine__ExecCommand (t_L_563=0x448ef0 "\260\324\005",

'cause i.e. it complicates any lifetime/management.
I do understand some of the problems here, like needing separate threads to read stdout/stderr, if they are not equal.

 - Jay


From: Jay K
Sent: Wednesday, January 12, 2022 4:12 AM
To: cygwin@sourceware.org <cygwin@sourceware.org>
Subject: proc_waiter: error on read of child wait pipe 0x0, Win32 error 6 
 
I get this a lot:

      0 [waitproc] cm3 7641 proc_waiter: error on read of child wait pipe 0x0, Win32 error 6
    452 [waitproc] cm3 7641 proc_waiter: error on read of child wait pipe 0x0, Win32 error 6
    716 [waitproc] cm3 7641 proc_waiter: error on read of child wait pipe 0x0, Win32 error 6
   1652 [waitproc] cm3 7641 proc_waiter: error on read of child wait pipe 0x0, Win32 error 6
      0 [main] sh 7775 C:\cygwin64\bin\sh.exe: *** fatal error - internal error reading the windows environment - too many environment variables?
 
Scenario is multi-threaded "launching" a bunch of invocations of gcc.
"launching" was usually spawnve or fork/execve but I changed the code to use system and it still happens.
I might try to make a small reproducing, if this is not known.
It seems a bit difficult to believe I could cause this internal looking error.

Thank you,
 - Jay

  parent reply	other threads:[~2022-01-13  6:40 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-12  4:12 Jay K
2022-01-12  5:57 ` Jay K
2022-01-12  6:27   ` Jay K
2022-01-12  6:41     ` Marco Atzeri
2022-01-13 23:52       ` Takashi Yano
2022-01-14  0:11         ` Mark Geisert
2022-01-14  0:22           ` Takashi Yano
2022-01-13  6:40     ` Jay K [this message]
2022-01-13 13:42       ` Eliot Moss

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=MWHPR1401MB195147B622BB5A90492E577AE6539@MWHPR1401MB1951.namprd14.prod.outlook.com \
    --to=jayk123@hotmail.com \
    --cc=cygwin@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).