Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/winsup
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2005-09-05 21:30:04 +0400
committerChristopher Faylor <me@cgf.cx>2005-09-05 21:30:04 +0400
commita743e3b94089a13f47b3294e91027cecbf29fe0f (patch)
treee60d29c389beb2a11a62a1dfb50d4fe69ab5059a /winsup
parentbf58ec35b4e79aa656b057bc754b64fe39e270da (diff)
* cygheap.cc (cygheap_init): Eliminate debugging #if.
* fork.cc (fork_parent): Don't issue errors if "somebody" has set the PID_EXITED flag on a child. Don't close process handle if it has potentially already been closed. * pinfo.cc (winpids::add): Eliminate PID_ALLPIDS handling which was obsoleted by previous changes. * spawn.cc (av::fixup): Do win16 detection for .com files. Make sure that buffer has been unmapped in all cases.
Diffstat (limited to 'winsup')
-rw-r--r--winsup/cygwin/ChangeLog13
-rw-r--r--winsup/cygwin/cygheap.cc5
-rw-r--r--winsup/cygwin/fork.cc13
-rw-r--r--winsup/cygwin/pinfo.cc5
-rw-r--r--winsup/cygwin/spawn.cc5
5 files changed, 26 insertions, 15 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 08907250f..79e62e8e7 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,16 @@
+2005-09-05 Christopher Faylor <cgf@timesys.com>
+
+ * cygheap.cc (cygheap_init): Eliminate debugging #if.
+
+ * fork.cc (fork_parent): Don't issue errors if "somebody" has set the
+ PID_EXITED flag on a child. Don't close process handle if it has
+ potentially already been closed.
+ * pinfo.cc (winpids::add): Eliminate PID_ALLPIDS handling which was
+ obsoleted by previous changes.
+
+ * spawn.cc (av::fixup): Do win16 detection for .com files. Make sure
+ that buffer has been unmapped in all cases.
+
2005-09-05 Corinna Vinschen <corinna@vinschen.de>
* thread.h (pthread_mutex::get_pthread_self): Remove.
diff --git a/winsup/cygwin/cygheap.cc b/winsup/cygwin/cygheap.cc
index 7db84cc5b..6cbdf6ef7 100644
--- a/winsup/cygwin/cygheap.cc
+++ b/winsup/cygwin/cygheap.cc
@@ -158,12 +158,7 @@ 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));
}
diff --git a/winsup/cygwin/fork.cc b/winsup/cygwin/fork.cc
index 785aabd4f..f16eabc32 100644
--- a/winsup/cygwin/fork.cc
+++ b/winsup/cygwin/fork.cc
@@ -283,8 +283,7 @@ fork_parent (HANDLE&, dll *&first_dll, bool& load_dlls, void *stack_here, child_
pthread::atforkprepare ();
- int c_flags = GetPriorityClass (hMainProc) /*|
- CREATE_NEW_PROCESS_GROUP*/;
+ int c_flags = GetPriorityClass (hMainProc);
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
@@ -336,7 +335,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, %x, 0, 0, %p, %p)",
+ syscall_printf ("CreateProcess (%s, %s, 0, 0, 1, %p, 0, 0, %p, %p)",
myself->progname, myself->progname, c_flags, &si, &pi);
bool locked = __malloc_lock ();
rc = CreateProcess (myself->progname, /* image to run */
@@ -418,7 +417,8 @@ 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))
{
- system_printf ("child %d died waiting for longjmp before initialization", child_pid);
+ if (NOTSTATE (child, PID_EXITED))
+ system_printf ("child %d died waiting for longjmp before initialization", child_pid);
goto cleanup;
}
@@ -469,7 +469,8 @@ 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))
{
- system_printf ("child %d died waiting for dll loading", child_pid);
+ if (NOTSTATE (child, PID_EXITED))
+ system_printf ("child %d died waiting for dll loading", child_pid);
goto cleanup;
}
@@ -506,7 +507,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)
+ if (pi.hProcess && !child.hProcess)
ForceCloseHandle1 (pi.hProcess, childhProc);
if (pi.hThread)
ForceCloseHandle (pi.hThread);
diff --git a/winsup/cygwin/pinfo.cc b/winsup/cygwin/pinfo.cc
index 1a08f575b..0e89ca03b 100644
--- a/winsup/cygwin/pinfo.cc
+++ b/winsup/cygwin/pinfo.cc
@@ -1196,8 +1196,7 @@ winpids::add (DWORD& nelem, bool winpid, DWORD pid)
pinfolist = (pinfo *) realloc (pinfolist, size_pinfolist (npidlist + 1));
}
- pinfolist[nelem].init (cygpid, PID_NOREDIR | (winpid ? PID_ALLPIDS : 0)
- | pinfo_access, NULL);
+ pinfolist[nelem].init (cygpid, PID_NOREDIR | pinfo_access, NULL);
if (winpid)
goto out;
@@ -1205,7 +1204,7 @@ winpids::add (DWORD& nelem, bool winpid, DWORD pid)
{
if (!pinfo_access)
return;
- pinfolist[nelem].init (cygpid, PID_NOREDIR | (winpid ? PID_ALLPIDS : 0), NULL);
+ pinfolist[nelem].init (cygpid, PID_NOREDIR, NULL);
if (!pinfolist[nelem])
return;
}
diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc
index 39402182a..e2c3decf5 100644
--- a/winsup/cygwin/spawn.cc
+++ b/winsup/cygwin/spawn.cc
@@ -1020,7 +1020,9 @@ av::fixup (child_info_types chtype, const char *prog_arg, path_conv& real_path,
{
/* If the file name ends in either .exe, .com, .bat, or .cmd we assume
that it is NOT a script file */
- while (*ext == '\0' || chtype == PROC_SPAWN || (wincap.detect_win16_exe () && strcasematch (ext, ".exe")))
+ while (*ext == '\0' || chtype == PROC_SPAWN
+ || (wincap.detect_win16_exe () && (strcasematch (ext, ".exe")
+ || strcasematch (ext, ".com"))))
{
HANDLE h = CreateFile (real_path, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
@@ -1053,6 +1055,7 @@ av::fixup (child_info_types chtype, const char *prog_arg, path_conv& real_path,
if (real_path.has_acls () && allow_ntsec
&& check_file_access (real_path, X_OK))
{
+ UnmapViewOfFile (buf);
debug_printf ("... but not executable");
break;
}