* pinfo.cc (_pinfo::dup_proc_pipe): Reorganize to provide more information for
failing condition. (pinfo::wait): Pass name of function to dup_proc_pipe. Eliminate error check for dup_proc_pipe since it never actually returned an error. * pinfo.h (_pinfo::dup_proc_pipe): Add an argument. * spawn.cc (child_info_spawn::worker): Pass name of function to dup_proc_pipe.
This commit is contained in:
		
							parent
							
								
									1d928241e1
								
							
						
					
					
						commit
						ab79e06445
					
				| 
						 | 
				
			
			@ -1,3 +1,13 @@
 | 
			
		|||
2012-03-07  Christopher Faylor  <me.cygwin2012@cgf.cx>
 | 
			
		||||
 | 
			
		||||
	* pinfo.cc (_pinfo::dup_proc_pipe): Reorganize to provide more
 | 
			
		||||
	information for failing condition.
 | 
			
		||||
	(pinfo::wait): Pass name of function to dup_proc_pipe.  Eliminate error
 | 
			
		||||
	check for dup_proc_pipe since it never actually returned an error.
 | 
			
		||||
	* pinfo.h (_pinfo::dup_proc_pipe): Add an argument.
 | 
			
		||||
	* spawn.cc (child_info_spawn::worker): Pass name of function to
 | 
			
		||||
	dup_proc_pipe.
 | 
			
		||||
 | 
			
		||||
2012-03-07  Corinna Vinschen  <corinna@vinschen.de>
 | 
			
		||||
 | 
			
		||||
	* glob.cc (MAXPATHLEN): Reinstantiate with a value of 8192.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -986,7 +986,7 @@ proc_waiter (void *arg)
 | 
			
		|||
#define warn_printf system_printf
 | 
			
		||||
#endif
 | 
			
		||||
HANDLE
 | 
			
		||||
_pinfo::dup_proc_pipe (HANDLE hProcess)
 | 
			
		||||
_pinfo::dup_proc_pipe (HANDLE hProcess, const char *func)
 | 
			
		||||
{
 | 
			
		||||
  DWORD flags = DUPLICATE_SAME_ACCESS;
 | 
			
		||||
  HANDLE orig_wr_proc_pipe = wr_proc_pipe;
 | 
			
		||||
| 
						 | 
				
			
			@ -997,17 +997,25 @@ _pinfo::dup_proc_pipe (HANDLE hProcess)
 | 
			
		|||
    flags |= DUPLICATE_CLOSE_SOURCE;
 | 
			
		||||
  bool res = DuplicateHandle (GetCurrentProcess (), wr_proc_pipe,
 | 
			
		||||
			      hProcess, &wr_proc_pipe, 0, FALSE, flags);
 | 
			
		||||
  if (!res && WaitForSingleObject (hProcess, 0) != WAIT_OBJECT_0)
 | 
			
		||||
  if (res)
 | 
			
		||||
    {
 | 
			
		||||
      wr_proc_pipe = orig_wr_proc_pipe;
 | 
			
		||||
      warn_printf ("something failed for pid %d: res %d, hProcess %p, wr_proc_pipe %p vs. %p, %E",
 | 
			
		||||
		   pid, res, hProcess, wr_proc_pipe, orig_wr_proc_pipe);
 | 
			
		||||
      wr_proc_pipe_owner = dwProcessId;
 | 
			
		||||
      sigproc_printf ("(%s) duped wr_proc_pipe %p for pid %d(%u)", func,
 | 
			
		||||
		      wr_proc_pipe, pid, dwProcessId);
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      wr_proc_pipe_owner = dwProcessId;
 | 
			
		||||
      sigproc_printf ("duped wr_proc_pipe %p for pid %d(%u)", wr_proc_pipe,
 | 
			
		||||
		      pid, dwProcessId);
 | 
			
		||||
      DWORD duperr = GetLastError ();
 | 
			
		||||
      DWORD wfsores = WaitForSingleObject (hProcess, 0);
 | 
			
		||||
      if (wfsores != WAIT_OBJECT_0)
 | 
			
		||||
	{
 | 
			
		||||
	  warn_printf ("(%s) process synchronization failed for pid %u/%p, "
 | 
			
		||||
		       "wr_proc_pipe %p vs. %p: DuplicateHandle winerr %d, "
 | 
			
		||||
		       "WFSO returned %u, %E",
 | 
			
		||||
		       func, pid, hProcess, wr_proc_pipe, orig_wr_proc_pipe, duperr,
 | 
			
		||||
		       wfsores);
 | 
			
		||||
	}
 | 
			
		||||
      wr_proc_pipe = orig_wr_proc_pipe;
 | 
			
		||||
    }
 | 
			
		||||
  return orig_wr_proc_pipe;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1030,11 +1038,7 @@ pinfo::wait ()
 | 
			
		|||
	  return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
      if (!(*this)->dup_proc_pipe (hProcess))
 | 
			
		||||
	{
 | 
			
		||||
	  system_printf ("Couldn't duplicate pipe topid %d(%p), %E", (*this)->pid, hProcess);
 | 
			
		||||
	  return false;
 | 
			
		||||
	}
 | 
			
		||||
      (*this)->dup_proc_pipe (hProcess, "pinfo::wait");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  preserve ();		/* Preserve the shared memory associated with the pinfo */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -111,7 +111,7 @@ public:
 | 
			
		|||
  char *cwd (size_t &);
 | 
			
		||||
  char *cmdline (size_t &);
 | 
			
		||||
  bool set_ctty (class fhandler_termios *, int);
 | 
			
		||||
  HANDLE dup_proc_pipe (HANDLE) __attribute__ ((regparm(2)));
 | 
			
		||||
  HANDLE dup_proc_pipe (HANDLE, const char *) __attribute__ ((regparm(3)));
 | 
			
		||||
  void sync_proc_pipe ();
 | 
			
		||||
  bool alert_parent (char);
 | 
			
		||||
  int __stdcall kill (siginfo_t&) __attribute__ ((regparm (2)));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -785,7 +785,7 @@ loop:
 | 
			
		|||
	    myself->sync_proc_pipe ();	/* Make sure that we own wr_proc_pipe
 | 
			
		||||
					   just in case we've been previously
 | 
			
		||||
					   execed. */
 | 
			
		||||
	  orig_wr_proc_pipe = myself->dup_proc_pipe (pi.hProcess);
 | 
			
		||||
	  orig_wr_proc_pipe = myself->dup_proc_pipe (pi.hProcess, "child_info_spawn::worker");
 | 
			
		||||
	}
 | 
			
		||||
      pid = myself->pid;
 | 
			
		||||
      if (!iscygwin ())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue