OSDN Git Service

revert inexplicable previous checkin
authorcgf <cgf>
Fri, 2 Sep 2005 04:51:09 +0000 (04:51 +0000)
committercgf <cgf>
Fri, 2 Sep 2005 04:51:09 +0000 (04:51 +0000)
winsup/cygwin/cygheap.cc
winsup/cygwin/dcrt0.cc
winsup/cygwin/exceptions.cc
winsup/cygwin/fork.cc
winsup/cygwin/heap.cc
winsup/cygwin/init.cc
winsup/cygwin/pinfo.cc
winsup/cygwin/sigproc.cc
winsup/cygwin/sigproc.h

index 6cbdf6e..7db84cc 100644 (file)
@@ -158,7 +158,12 @@ cygheap_init ()
   cygheap_protect.init ("cygheap_protect");
   if (!cygheap)
     {
+#if 1
       cygheap = (init_cygheap *) memset (_cygheap_start, 0, _cygheap_mid - _cygheap_start);
+#else
+      cygheap = (init_cygheap *) _cygheap_start;
+#endif
+
       cygheap_max = cygheap;
       _csbrk (sizeof (*cygheap));
     }
index 1783d55..e88f64a 100644 (file)
@@ -547,7 +547,7 @@ initial_env ()
       len = GetModuleFileName (NULL, buf, CYG_MAX_PATH);
       console_printf ("Sleeping %d, pid %u %s\n", ms, GetCurrentProcessId (), buf);
       Sleep (ms);
-      if (!strace.active && !dynamically_loaded)
+      if (!strace.active)
        {
          strace.inited = 0;
          strace.hello ();
@@ -634,6 +634,7 @@ dll_crt0_0 ()
   wincap.init ();
   initial_env ();
 
+  init_console_handler (TRUE);
   init_global_security ();
   if (!DuplicateHandle (GetCurrentProcess (), GetCurrentProcess (),
                       GetCurrentProcess (), &hMainProc, 0, FALSE,
index 71a8b75..852b501 100644 (file)
@@ -123,8 +123,7 @@ void
 init_console_handler (BOOL install_handler)
 {
   BOOL res;
-  while (SetConsoleCtrlHandler (ctrl_c_handler, FALSE))
-    continue;
+  SetConsoleCtrlHandler (ctrl_c_handler, FALSE);
   if (install_handler)
     res = SetConsoleCtrlHandler (ctrl_c_handler, TRUE);
   else if (wincap.has_null_console_handler_routine ())
@@ -834,7 +833,6 @@ has_visible_window_station ()
 static BOOL WINAPI
 ctrl_c_handler (DWORD type)
 {
-console_printf ("%u OUCH!\n", GetCurrentProcessId ());
   static bool saw_close;
 
   if (!cygwin_finished_initializing)
@@ -847,11 +845,6 @@ console_printf ("%u OUCH!\n", GetCurrentProcessId ());
 
   _my_tls.remove (INFINITE);
 
-#if 0
-  if (type == CTRL_C_EVENT || type == CTRL_BREAK_EVENT)
-    proc_subproc (PROC_KILLFORKED, 0);
-#endif
-
   /* Return FALSE to prevent an "End task" dialog box from appearing
      for each Cygwin process window that's open when the computer
      is shut down or console window is closed. */
index f16eabc..785aabd 100644 (file)
@@ -283,7 +283,8 @@ fork_parent (HANDLE&, dll *&first_dll, bool& load_dlls, void *stack_here, child_
 
   pthread::atforkprepare ();
 
-  int c_flags = GetPriorityClass (hMainProc);
+  int c_flags = GetPriorityClass (hMainProc) /*|
+               CREATE_NEW_PROCESS_GROUP*/;
   STARTUPINFO si = {0, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL};
 
   /* If we don't have a console, then don't create a console for the
@@ -335,7 +336,7 @@ fork_parent (HANDLE&, dll *&first_dll, bool& load_dlls, void *stack_here, child_
   /* Remove impersonation */
   cygheap->user.deimpersonate ();
 
-  syscall_printf ("CreateProcess (%s, %s, 0, 0, 1, %p, 0, 0, %p, %p)",
+  syscall_printf ("CreateProcess (%s, %s, 0, 0, 1, %x, 0, 0, %p, %p)",
                  myself->progname, myself->progname, c_flags, &si, &pi);
   bool locked = __malloc_lock ();
   rc = CreateProcess (myself->progname, /* image to run */
@@ -417,8 +418,7 @@ fork_parent (HANDLE&, dll *&first_dll, bool& load_dlls, void *stack_here, child_
   /* Wait for subproc to initialize itself. */
   if (!ch.sync (child->pid, pi.hProcess, FORK_WAIT_TIMEOUT))
     {
-      if (NOTSTATE (child, PID_EXITED))
-       system_printf ("child %d died waiting for longjmp before initialization", child_pid);
+      system_printf ("child %d died waiting for longjmp before initialization", child_pid);
       goto cleanup;
     }
 
@@ -469,8 +469,7 @@ fork_parent (HANDLE&, dll *&first_dll, bool& load_dlls, void *stack_here, child_
     goto cleanup;
   else if (!ch.sync (child->pid, pi.hProcess, FORK_WAIT_TIMEOUT))
     {
-      if (NOTSTATE (child, PID_EXITED))
-       system_printf ("child %d died waiting for dll loading", child_pid);
+      system_printf ("child %d died waiting for dll loading", child_pid);
       goto cleanup;
     }
 
@@ -507,7 +506,7 @@ fork_parent (HANDLE&, dll *&first_dll, bool& load_dlls, void *stack_here, child_
     __malloc_unlock ();
 
   /* Remember to de-allocate the fd table. */
-  if (pi.hProcess && !child.hProcess)
+  if (pi.hProcess)
     ForceCloseHandle1 (pi.hProcess, childhProc);
   if (pi.hThread)
     ForceCloseHandle (pi.hThread);
index bd1b2e3..9f86f99 100644 (file)
@@ -34,11 +34,9 @@ extern "C" size_t getpagesize ();
 void
 heap_init ()
 {
-static int seen = 0;
   /* If we're the forkee, we must allocate the heap at exactly the same place
      as our parent.  If not, we don't care where it ends up.  */
 
-seen++;
   page_const = system_info.dwPageSize;
   if (!cygheap->user_heap.base)
     {
@@ -75,11 +73,11 @@ seen++;
                                     MEM_RESERVE, PAGE_READWRITE);
          if (p)
            break;
-         if ((reserve_size -= page_const) < allocsize)
+         if ((reserve_size -= page_const) <= allocsize)
            break;
        }
       if (!p)
-       api_fatal ("couldn't allocate heap, %E, base %p, top %p, "
+       api_fatal ("couldn't allocate cygwin heap, %E, base %p, top %p, "
                   "reserve_size %d, allocsize %d, page_const %d",
                   cygheap->user_heap.base, cygheap->user_heap.top,
                   reserve_size, allocsize, page_const);
index cad51cc..491a9d2 100644 (file)
@@ -147,7 +147,6 @@ dll_entry (HANDLE h, DWORD reason, void *static_load)
     case DLL_PROCESS_ATTACH:
       cygwin_hmodule = (HMODULE) h;
       dynamically_loaded = (static_load == NULL);
-      init_console_handler (TRUE);
 
       /* Is the stack at an unusual address?  This is, an address which
          is in the usual space occupied by the process image, but below
index 0e89ca0..1a08f57 100644 (file)
@@ -1196,7 +1196,8 @@ winpids::add (DWORD& nelem, bool winpid, DWORD pid)
       pinfolist = (pinfo *) realloc (pinfolist, size_pinfolist (npidlist + 1));
     }
 
-  pinfolist[nelem].init (cygpid, PID_NOREDIR | pinfo_access, NULL);
+  pinfolist[nelem].init (cygpid, PID_NOREDIR | (winpid ? PID_ALLPIDS : 0)
+                        | pinfo_access, NULL);
   if (winpid)
     goto out;
 
@@ -1204,7 +1205,7 @@ winpids::add (DWORD& nelem, bool winpid, DWORD pid)
     {
       if (!pinfo_access)
        return;
-      pinfolist[nelem].init (cygpid, PID_NOREDIR, NULL);
+      pinfolist[nelem].init (cygpid, PID_NOREDIR | (winpid ? PID_ALLPIDS : 0), NULL);
       if (!pinfolist[nelem])
        return;
       }
index c7752b8..74ffed1 100644 (file)
@@ -346,15 +346,6 @@ proc_subproc (DWORD what, DWORD val)
       if (global_sigs[SIGCHLD].sa_handler == (void *) SIG_IGN)
        for (int i = 0; i < nprocs; i += remove_proc (i))
          continue;
-      break;
-    case PROC_KILLFORKED:
-      for (int i = 0; i < nprocs; i++)
-       if (ISSTATE (procs[i], PID_INITIALIZING))
-         {
-           TerminateProcess (procs[i].hProcess, 1);
-           procs[i]->process_state = PID_EXITED;
-         }
-      break;
   }
 
 out:
index 2112d79..74d8d3b 100644 (file)
@@ -34,8 +34,7 @@ enum procstuff
   PROC_DETACHED_CHILD    = 2,  // set up a detached child
   PROC_CLEARWAIT         = 3,  // clear all waits - signal arrived
   PROC_WAIT              = 4,  // setup for wait() for subproc
-  PROC_KILLFORKED        = 5,  // kill forked children on CTRL-C.
-  PROC_NOTHING           = 6   // nothing, really
+  PROC_NOTHING           = 5   // nothing, really
 };
 
 struct sigpacket