Revert previous erroneous checkin.
This commit is contained in:
		
							parent
							
								
									c19e7ba723
								
							
						
					
					
						commit
						e1cf4ae80c
					
				| 
						 | 
				
			
			@ -666,7 +666,7 @@ dll_crt0_1 ()
 | 
			
		|||
				  //  should be blocked.
 | 
			
		||||
 | 
			
		||||
  if (mypid)
 | 
			
		||||
    set_myself ((pid_t) mypid, NULL);
 | 
			
		||||
    set_myself ((pid_t) mypid);
 | 
			
		||||
 | 
			
		||||
  (void) SetErrorMode (SEM_FAILCRITICALERRORS);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -834,7 +834,6 @@ _dll_crt0 ()
 | 
			
		|||
  DuplicateHandle (hMainProc, GetCurrentThread (), hMainProc,
 | 
			
		||||
		   &hMainThread, 0, FALSE, DUPLICATE_SAME_ACCESS);
 | 
			
		||||
 | 
			
		||||
  HANDLE h;
 | 
			
		||||
  GetStartupInfo (&si);
 | 
			
		||||
  if (si.cbReserved2 >= EXEC_MAGIC_SIZE &&
 | 
			
		||||
      memcmp (ciresrv->zero, zeros, sizeof (zeros)) == 0)
 | 
			
		||||
| 
						 | 
				
			
			@ -869,14 +868,6 @@ _dll_crt0 ()
 | 
			
		|||
		  case PROC_EXEC:
 | 
			
		||||
		  case PROC_SPAWN:
 | 
			
		||||
		    info = si.lpReserved2 + ciresrv->cb;
 | 
			
		||||
		    if (child_proc_info->myself_pinfo &&
 | 
			
		||||
			DuplicateHandle (hMainProc, child_proc_info->myself_pinfo,
 | 
			
		||||
					 hMainProc, &h, 0, 0,
 | 
			
		||||
					 DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE))
 | 
			
		||||
		      {
 | 
			
		||||
			set_myself (mypid, h);
 | 
			
		||||
			mypid = 0;
 | 
			
		||||
		      }
 | 
			
		||||
		    break;
 | 
			
		||||
		  case PROC_FORK:
 | 
			
		||||
		  case PROC_FORK1:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,17 +30,17 @@ static pinfo NO_COPY myself_identity ((_pinfo *)&pinfo_dummy);
 | 
			
		|||
   This is done once when the dll is first loaded.  */
 | 
			
		||||
 | 
			
		||||
void __stdcall
 | 
			
		||||
set_myself (pid_t pid, HANDLE h)
 | 
			
		||||
set_myself (pid_t pid)
 | 
			
		||||
{
 | 
			
		||||
  DWORD winpid = GetCurrentProcessId ();
 | 
			
		||||
  if (pid == 1)
 | 
			
		||||
    pid = cygwin_pid (winpid);
 | 
			
		||||
  myself.init (pid, 1, h);
 | 
			
		||||
  myself.init (pid, 1);
 | 
			
		||||
  myself->dwProcessId = winpid;
 | 
			
		||||
  myself->process_state |= PID_IN_USE;
 | 
			
		||||
  myself->start_time = time (NULL); /* Register our starting time. */
 | 
			
		||||
  pid_t myself_cyg_pid = cygwin_pid (myself->dwProcessId);
 | 
			
		||||
  if (pid != myself_cyg_pid && parent_alive)
 | 
			
		||||
  if (pid != myself_cyg_pid)
 | 
			
		||||
    myself_identity.init (myself_cyg_pid, PID_EXECED);
 | 
			
		||||
 | 
			
		||||
  char buf[30];
 | 
			
		||||
| 
						 | 
				
			
			@ -95,7 +95,7 @@ pinfo_init (LPBYTE info)
 | 
			
		|||
    {
 | 
			
		||||
      /* Invent our own pid.  */
 | 
			
		||||
 | 
			
		||||
      set_myself (1, NULL);
 | 
			
		||||
      set_myself (1);
 | 
			
		||||
      myself->ppid = 1;
 | 
			
		||||
      myself->pgid = myself->sid = myself->pid;
 | 
			
		||||
      myself->ctty = -1;
 | 
			
		||||
| 
						 | 
				
			
			@ -197,7 +197,7 @@ _pinfo::record_death ()
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
pinfo::init (pid_t n, DWORD create, HANDLE in_h)
 | 
			
		||||
pinfo::init (pid_t n, DWORD create)
 | 
			
		||||
{
 | 
			
		||||
  if (n == myself->pid)
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			@ -217,12 +217,7 @@ pinfo::init (pid_t n, DWORD create, HANDLE in_h)
 | 
			
		|||
  else
 | 
			
		||||
    mapsize = sizeof (_pinfo);
 | 
			
		||||
 | 
			
		||||
  if (in_h)
 | 
			
		||||
    {
 | 
			
		||||
      h = in_h;
 | 
			
		||||
      created = 0;
 | 
			
		||||
    }
 | 
			
		||||
  else if (!create)
 | 
			
		||||
  if (!create)
 | 
			
		||||
    {
 | 
			
		||||
      /* CGF FIXME -- deal with inheritance after an exec */
 | 
			
		||||
      h = OpenFileMappingA (FILE_MAP_READ | FILE_MAP_WRITE, FALSE, mapname);
 | 
			
		||||
| 
						 | 
				
			
			@ -230,7 +225,7 @@ pinfo::init (pid_t n, DWORD create, HANDLE in_h)
 | 
			
		|||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      h = CreateFileMapping ((HANDLE) 0xffffffff, &sec_all_nih,
 | 
			
		||||
      h = CreateFileMapping ((HANDLE) 0xffffffff, &sec_none_nih,
 | 
			
		||||
			      PAGE_READWRITE, 0, mapsize, mapname);
 | 
			
		||||
      created = h && GetLastError () != ERROR_ALREADY_EXISTS;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -243,13 +238,11 @@ pinfo::init (pid_t n, DWORD create, HANDLE in_h)
 | 
			
		|||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  ProtectHandle1 (h, pinfo_shared_handle);
 | 
			
		||||
  child = (_pinfo *) MapViewOfFile (h, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
 | 
			
		||||
 | 
			
		||||
  if (child->process_state & PID_EXECED)
 | 
			
		||||
    {
 | 
			
		||||
      pid_t realpid = child->pid;
 | 
			
		||||
      debug_printf ("execed process windows pid %d, cygwin pid %d", n, realpid);
 | 
			
		||||
      release ();
 | 
			
		||||
      if (realpid == n)
 | 
			
		||||
	api_fatal ("retrieval of execed process info for pid %d failed due to recursion.", n);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -117,7 +117,7 @@ class pinfo
 | 
			
		|||
  _pinfo *child;
 | 
			
		||||
  int destroy;
 | 
			
		||||
public:
 | 
			
		||||
  void init (pid_t n, DWORD create = 0, HANDLE h = NULL);
 | 
			
		||||
  void init (pid_t n, DWORD create = 0);
 | 
			
		||||
  pinfo () {}
 | 
			
		||||
  pinfo (_pinfo *x): child (x) {}
 | 
			
		||||
  pinfo (pid_t n) {init (n);}
 | 
			
		||||
| 
						 | 
				
			
			@ -127,7 +127,7 @@ public:
 | 
			
		|||
    if (h)
 | 
			
		||||
      {
 | 
			
		||||
	UnmapViewOfFile (child);
 | 
			
		||||
	ForceCloseHandle1 (h, pinfo_shared_handle);
 | 
			
		||||
	CloseHandle (h);
 | 
			
		||||
	h = NULL;
 | 
			
		||||
      }
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -145,9 +145,7 @@ public:
 | 
			
		|||
  int operator == (char *x) const {return (char *) child == x;}
 | 
			
		||||
  _pinfo *operator * () const {return child;}
 | 
			
		||||
  operator _pinfo * () const {return child;}
 | 
			
		||||
  // operator bool () const {return (int) h;}
 | 
			
		||||
  void remember () {destroy = 0; proc_subproc (PROC_ADDCHILD, (DWORD) this);}
 | 
			
		||||
  HANDLE shared_handle () {return h;}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define ISSTATE(p, f)	(!!((p)->process_state & f))
 | 
			
		||||
| 
						 | 
				
			
			@ -170,7 +168,5 @@ cygwin_pid (pid_t pid)
 | 
			
		|||
{
 | 
			
		||||
  return (pid_t) (os_being_run == winNT) ? pid : -(int) pid;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void __stdcall pinfo_init (BYTE *);
 | 
			
		||||
void __stdcall set_myself (pid_t pid, HANDLE h = NULL);
 | 
			
		||||
void __stdcall pinfo_init (PBYTE);
 | 
			
		||||
extern pinfo myself;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -67,7 +67,6 @@ public:
 | 
			
		|||
  HANDLE shared_h;
 | 
			
		||||
  HANDLE console_h;
 | 
			
		||||
  HANDLE parent_alive;	// handle of thread used to track children
 | 
			
		||||
  HANDLE myself_pinfo;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class child_info_fork: public child_info
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -494,10 +494,6 @@ skip_arg_parsing:
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
  init_child_info (chtype, ciresrv, (mode == _P_OVERLAY) ? myself->pid : 1, spr);
 | 
			
		||||
  if (mode != _P_OVERLAY ||
 | 
			
		||||
      !DuplicateHandle (hMainProc, myself.shared_handle (), hMainProc, &ciresrv->myself_pinfo, 0,
 | 
			
		||||
		       TRUE, DUPLICATE_SAME_ACCESS))
 | 
			
		||||
   ciresrv->myself_pinfo = NULL;
 | 
			
		||||
 | 
			
		||||
  LPBYTE resrv = si.lpReserved2 + sizeof *ciresrv;
 | 
			
		||||
# undef ciresrv
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -283,6 +283,7 @@ long __stdcall to_time_t (FILETIME * ptr);
 | 
			
		|||
int __stdcall lock_pinfo_for_update (DWORD timeout);
 | 
			
		||||
#endif
 | 
			
		||||
void unlock_pinfo (void);
 | 
			
		||||
void _stdcall set_myself (pid_t pid);
 | 
			
		||||
 | 
			
		||||
/* Retrieve a security descriptor that allows all access */
 | 
			
		||||
SECURITY_DESCRIPTOR *__stdcall get_null_sd (void);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue