Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Message-ID: <001101c201a8$2148fc40$df250b93@ALASTIMSON> From: "Leo Kuznetsov" To: Cc: "Richard Levien" Subject: Bug: fhandler.cc rev=1.116 source code level bug in fhandler_base::dup (fhandler_base *child) Date: Wed, 22 May 2002 08:48:33 -0700 MIME-Version: 1.0 Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 Hi, I might be wrong but it looks like: In the function below ------------------------ if (get_nohandle ()) nh = NULL; // NULL == 0 and is a valid (but possibly closed) handle ------------------------ MUST BE ------------------------ if (get_nohandle ()) nh = (HANDLE)-1; // or better yet INVALID_HANDLE_VALUE ========================= Otherwise dup(dup(-1)) == dup(0) and sets an error if handle 0 is closed. (This is excatly the case with recursive invocation of gmake jobs with stdio redirected to pipes)... --------------------------------- FILE: fhandler.cc LINE: ~886 int fhandler_base::dup (fhandler_base *child) { debug_printf ("in fhandler_base dup"); HANDLE nh; if (get_nohandle ()) nh = NULL; else if (!DuplicateHandle (hMainProc, get_handle(), hMainProc, &nh, 0, TRUE, DUPLICATE_SAME_ACCESS)) { system_printf ("dup(%s) failed, handle %x, %E", get_name (), get_handle()); __seterrno (); return -1; } child->set_io_handle (nh); return 0; } -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/