Mail Archives: cygwin/2002/05/22/13:25:39
On Wed, May 22, 2002 at 08:48:33AM -0700, Leo Kuznetsov wrote:
>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)...
1) What's "gmake"?
2) Why shouldn't it "set an error" if handle 0 is closed?
3) Why would anyone do a dup(dup(-1))?
4) Why would setting nh to anything affect this code? This code path is
only invoked for /cygdrive or /proc style paths.
If you have a specific problem, you should provide a test case. I don't
see any problems with recursive invocation of gmake jobs with stdio.
cgf
>---------------------------------
>
>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/
--
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/
- Raw text -