bugmake - Bugs: bug #20495, debug version crashes on windows...


bug #20495: debug version crashes on windows on close(-1)

Submitted by:  Thomas Stuefe <tstuefe>
Submitted on:  Mon 16 Jul 2007 07:49:06 AM UTC  
Severity: 3 - NormalItem Group: Bug
Status: FixedPrivacy: Public
Assigned to: Eli Zaretskii <eliz>Open/Closed: Closed
Component Version: 3.81Operating System: MS Windows
Fixed Release: 3.82Triage Status: None

Add a New Comment(Rich Markup)

You are not logged in

Please log in, so followups can be emailed to you.


Sat 07 Mar 2009 05:34:39 PM UTC, comment #2:

Thank you for your report. I fixed this bug in CVS with the attached patch.

Eli Zaretskii <eliz>
Project MemberIn charge of this item.
Tue 03 Mar 2009 04:16:54 PM UTC, comment #1:

There seems to be a change within the Microsoft Visual C++ Runtime between Microsoft Visual Studio .NET (aka 2002) and Microsoft Visual Studio 2005. I have no access to Microsoft Visual Studio 2003 so I can't prove if this behavior was introduced earlier.

Microsoft Visual Studio .NET\Vc7\crt\src\close.c

/* validate file handle */
if ( ((unsigned)fh >= (unsigned)_nhandle) ||
!(_osfile(fh) & FOPEN) )
/* bad file handle, set errno and abort */
errno = EBADF;
_doserrno = 0;
return -1;

Microsoft Visual Studio 8\VC\crt\src\close.c

/* validate file handle */
_VALIDATE_CLEAR_OSSERR_RETURN((fh >= 0 && (unsigned)fh < (unsigned)_nhandle), EBADF, -1);

Anyway, closing the file handle -1 is definitely a bug, which was ignored by earlier versions of the Microsoft libraries (in fact it was reported by the return code of close() which is explicitly ignored by the caller within function.c).

Regards, Stefan

Mon 16 Jul 2007 07:49:06 AM UTC, original submission:

I build gnumake and run it on windows. When executing a command ($(shell ..), the command executes, but afterwards make crashes because the MS debug C-Runtime detects a close(-1) and throws an error.

When debugging, I saw that the offending close was at
/* Close the write side of the pipe. */
(void) close (pipedes[1]);

pipedes[1] is -1, pipedes[0] is a valid file handle.

A workaround at this point would be a if(pipedes[1]!=-1) close(..)


When debugging further, I looked at the function "windows32_openpipe". What happens is that the child process spawns fine, but the line 1490:
pipedes[1] = _open_osfhandle((long) hChildOutWr, O_APPEND);
sets pipedes[1] to -1.

I actually don't get this coding, but maybe its me. What I don't understand is how the stdin to the child process is supposed to work at all. Parent hands down its own duplicated stdin to the child
(see line 1471, "hProcess = process_init_fd(hIn, hChildOutWr,
and later on tries to get an OS handle for the write end of the child's stdout pipe (line 1490)?
As I said, maybe I simply don't get it. Microsoft's example for stdio-redirection looks different:

"How to spawn console processes with redirected standard handles"

Best Regards,

Thomas Stuefe

Thomas Stuefe <tstuefe>


(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

Attach File(s):

Attached Files
file #17613:  w32clospipe.dif added by eliz (536B - application/vnd.ms-excel)


Depends on the following items: None found

Items that depend on this one: None found


Carbon-Copy List
  • -unavailable- added by psmith (Updated the item)
  • -unavailable- added by eliz (Posted a comment)
  • -unavailable- added by tstuefe (Submitted the item)

    Do you think this task is very important?
    If so, you can click here to add your encouragement to it.
    This task has 0 encouragements so far.

    Only logged-in users can vote.


    Please enter the title of George Orwell's famous dystopian book (it's a date):



    Follow 7 latest changes.

    Date Changed By Updated Field Previous Value => Replaced By
    Wed 28 Jul 2010 06:18:22 AM UTCpsmithFixed Release4.0=>3.82
    Sat 07 Mar 2009 09:31:22 PM UTCpsmithStatusNone=>Fixed
      Assigned toNone=>eliz
      Fixed ReleaseNone=>4.0
    Sat 07 Mar 2009 05:36:56 PM UTCelizAttached File-=>Added w32clospipe.dif, #17613
    Mon 16 Jul 2007 07:49:07 AM UTCtstuefeCarbon-Copy-=>Added tstuefe

    Back to the top

    Powered by Savane 3.1-cleanup1