On Thu, 17 Aug 2006, Brian Ford wrote: > On Thu, 10 Aug 2006, Christopher Faylor wrote: > > On Thu, Aug 10, 2006 at 11:19:15PM +0200, Dr. Volker Zell wrote: > > >Starting xterm from an rxvt window gives: > > >In the Xterm window > > > 587214 [main] xterm 296 modify_handle: virtual void > > > fhandler_pipe::set_close_on_exec(bool):175 handle guard<0x680> not found > > > > That one *could* be responsible. I was suspecting something in the pipe > > code since it has often been the cause of handle closing confusion. > > Just in case anyone wants another simple test case: > > $ cat makefile > all: > echo hi > > $ make > echo hi > 7486 [main] make 2648 modify_handle: virtual void > fhandler_pipe::set_close_on_exec(bool):175 handle guard<0x734> not found > hi
Attached is a simpler C test case distilled from the make code causing the problem. $ gcc -g -O2 -Wall pipe.c -o pipe.exe $ ./pipe.exe 788 [main] pipe 2332 modify_handle: virtual void fhandler_pipe::set_close_on_exec(bool):175 handle guard<0x738> not found -- Brian Ford Lead Realtime Software Engineer VITAL - Visual Simulation Systems FlightSafety International the best safety device in any aircraft is a well-trained crew... .
#include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <fcntl.h> int main(void) { int fds[2], flags; /* Make a file descriptor that is the read end of a broken pipe. This will be used for the childs standard input. */ if (pipe(fds) < 0) { perror("pipe"); return -1; } /* Close the write side. */ close (fds[1]); /* Set close on exec, so it does not litter the child's descriptor table. When it is dup2'd onto descriptor 0, that descriptor will not close on exec. */ flags = fcntl(fds[0], F_GETFD, 0); if (flags < 0 || fcntl(fds[0], F_SETFD, flags|FD_CLOEXEC) < 0) { perror("close on exec"); return -1; } switch (fork()) { case (pid_t)-1: perror("fork failed"); return -1; case 0: // child if (dup2(fds[0], 0) < 0) /* make stdin a broken pipe */ { perror("dup2 in"); _exit(-1); } execlp("ls", "ls", NULL); perror("exec ls"); _exit(-1); default: // parent close(fds[0]); } return 0; }
-- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/