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
diff options
context:
space:
mode:
-rw-r--r--winsup/cygwin/ChangeLog19
-rw-r--r--winsup/cygwin/dcrt0.cc7
-rw-r--r--winsup/cygwin/debug.cc20
-rw-r--r--winsup/cygwin/debug.h2
-rw-r--r--winsup/cygwin/exceptions.cc2
-rw-r--r--winsup/cygwin/fhandler.cc17
-rw-r--r--winsup/cygwin/shared.cc2
7 files changed, 42 insertions, 27 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 98ccb9d2c..fe427c621 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,22 @@
+2002-07-14 Christopher Faylor <cgf@redhat.com>
+
+ * dcrt0.cc (dll_crt0_1): Move debug_init call back to here. Avoid a
+ compiler warning.
+ * shared.cc (memory_init): Remove debug_init call.
+ * debug.h (handle_list): Change "clexec" to "inherited".
+ * debug.cc: Remove a spurious declaration.
+ (setclexec): Conditionalize away since it is currently unused.
+ (add_handle): Use inherited field rather than clexec.
+ (debug_fixup_after_fork_exec): Ditto. Move debugging output to
+ delete_handle.
+ (delete_handle): Add debugging output.
+ * fhandler.cc (fhandler_base::set_inheritance): Don't bother setting
+ inheritance in debugging table since the handle was never protected
+ anyway.
+ (fhandler_base::fork_fixup): Ditto.
+
+ * exceptions.cc (debugger_command): Revert.
+
2002-07-14 Conrad Scott <conrad.scott@dsl.pipex.com>
* debug.cc (clexec): Add missing `hl = hl->next'.
diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc
index 1ba328f45..da3b5d52f 100644
--- a/winsup/cygwin/dcrt0.cc
+++ b/winsup/cygwin/dcrt0.cc
@@ -633,9 +633,14 @@ dll_crt0_1 ()
/* Initialize the cygwin subsystem if this is the first process,
or attach to shared data structures if it's already running. */
memory_init ();
+
ProtectHandle (hMainProc);
ProtectHandle (hMainThread);
+ /* Initialize debug muto, if DLL is built with --enable-debugging.
+ Need to do this before any helper threads start. */
+ debug_init ();
+
cygheap->fdtab.vfork_child_fixup ();
(void) SetErrorMode (SEM_FAILCRITICALERRORS);
@@ -807,7 +812,7 @@ initial_env ()
len = GetModuleFileName (NULL, buf1, MAX_PATH);
char *p = strchr (buf, '=');
if (!p)
- p = "gdb.exe -nw";
+ p = (char *) "gdb.exe -nw";
else
*p++ = '\0';
if (strstr (buf1, buf))
diff --git a/winsup/cygwin/debug.cc b/winsup/cygwin/debug.cc
index 369b3908f..f918b87c0 100644
--- a/winsup/cygwin/debug.cc
+++ b/winsup/cygwin/debug.cc
@@ -173,8 +173,6 @@ threadname (DWORD tid, int lockit)
#include <stdlib.h>
#define NFREEH (sizeof (cygheap->debug.freeh) / sizeof (cygheap->debug.freeh[0]))
-void debug_init ();
-
class lock_debug
{
static muto *locker;
@@ -223,17 +221,19 @@ out:
return hl;
}
+#ifdef DEBUGGING_AND_FDS_PROTECTED
void
-setclexec (HANDLE oh, HANDLE nh, bool setit)
+setclexec (HANDLE oh, HANDLE nh, bool not_inheriting)
{
handle_list *hl = find_handle (oh);
if (hl)
{
hl = hl->next;
- hl->clexec = setit;
+ hl->inherited = !not_inheriting;
hl->h = nh;
}
}
+#endif
/* Create a new handle record */
static handle_list * __stdcall
@@ -288,11 +288,11 @@ add_handle (const char *func, int ln, HANDLE h, const char *name, bool inh)
hl->func = func;
hl->ln = ln;
hl->next = NULL;
- hl->clexec = !inh;
+ hl->inherited = inh;
hl->pid = GetCurrentProcessId ();
cygheap->debug.endh->next = hl;
cygheap->debug.endh = hl;
- debug_printf ("protecting handle '%s', clexec flag %d", hl->name, hl->clexec);
+ debug_printf ("protecting handle '%s', inherited flag %d", hl->name, hl->inherited);
return;
}
@@ -301,6 +301,7 @@ static void __stdcall
delete_handle (handle_list *hl)
{
handle_list *hnuke = hl->next;
+ debug_printf ("nuking handle '%s'", hnuke->name);
hl->next = hl->next->next;
if (hnuke->allocated)
free (hnuke);
@@ -314,13 +315,10 @@ debug_fixup_after_fork_exec ()
/* No lock needed at this point */
handle_list *hl;
for (hl = &cygheap->debug.starth; hl->next != NULL; /* nothing */)
- if (!hl->next->clexec)
+ if (hl->next->inherited)
hl = hl->next;
else
- {
- debug_printf ("nuking handle '%s'", hl->next->name);
- delete_handle (hl); // removes hl->next
- }
+ delete_handle (hl); // removes hl->next
}
static bool __stdcall
diff --git a/winsup/cygwin/debug.h b/winsup/cygwin/debug.h
index 6abdcb0e2..719641f6f 100644
--- a/winsup/cygwin/debug.h
+++ b/winsup/cygwin/debug.h
@@ -92,7 +92,7 @@ struct handle_list
const char *name;
const char *func;
int ln;
- bool clexec;
+ bool inherited;
DWORD pid;
struct handle_list *next;
};
diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc
index cd0bb2586..1eb3fbac2 100644
--- a/winsup/cygwin/exceptions.cc
+++ b/winsup/cygwin/exceptions.cc
@@ -25,7 +25,7 @@ details. */
#define CALL_HANDLER_RETRY 20
-char debugger_command[2 * MAX_PATH + 20] = "dumper.exe %s";
+char debugger_command[2 * MAX_PATH + 20];
extern "C" {
static int handle_exceptions (EXCEPTION_RECORD *, void *, CONTEXT *, void *);
diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc
index e0f065b14..591bc72f5 100644
--- a/winsup/cygwin/fhandler.cc
+++ b/winsup/cygwin/fhandler.cc
@@ -1067,7 +1067,7 @@ fhandler_dev_null::dump (void)
void
fhandler_base::set_inheritance (HANDLE &h, int not_inheriting)
{
-#ifdef DEBUGGING
+#ifdef DEBUGGING_AND_FDS_PROTECTED
HANDLE oh = h;
#endif
/* Note that we could use SetHandleInformation here but it is not available
@@ -1078,7 +1078,7 @@ fhandler_base::set_inheritance (HANDLE &h, int not_inheriting)
if (!DuplicateHandle (hMainProc, h, hMainProc, &h, 0, !not_inheriting,
DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE))
debug_printf ("DuplicateHandle failed, %E");
-#ifdef DEBUGGING
+#ifdef DEBUGGING_AND_FDS_PROTECTED
if (h)
setclexec (oh, h, not_inheriting);
#endif
@@ -1087,21 +1087,16 @@ fhandler_base::set_inheritance (HANDLE &h, int not_inheriting)
void
fhandler_base::fork_fixup (HANDLE parent, HANDLE &h, const char *name)
{
-#ifdef DEBUGGING
- HANDLE oh = h;
-#endif
if (/* !is_socket () && */ !get_close_on_exec ())
debug_printf ("handle %p already opened", h);
else if (!DuplicateHandle (parent, h, hMainProc, &h, 0, !get_close_on_exec (),
DUPLICATE_SAME_ACCESS))
system_printf ("%s - %E, handle %s<%p>", get_name (), name, h);
-#ifdef DEBUGGING
+#ifdef DEBUGGING_AND_FDS_PROTECTED
+ else if (get_close_on_exec ())
+ ProtectHandle (h); /* would have to be fancier than this */
else
- {
- debug_printf ("%s success - oldh %p, h %p", get_name (), oh, h);
- // someday, maybe ProtectHandle2 (h, name);
- setclexec (oh, h, !get_close_on_exec ());
- }
+ /* ProtectHandleINH (h) */; /* Should already be protected */
#endif
}
diff --git a/winsup/cygwin/shared.cc b/winsup/cygwin/shared.cc
index 2c3ba8da6..dd8e67c63 100644
--- a/winsup/cygwin/shared.cc
+++ b/winsup/cygwin/shared.cc
@@ -143,8 +143,6 @@ memory_init ()
cygheap->user.set_name (user_name);
}
- debug_init ();
-
cygheap->shared_h = shared_h;
ProtectHandleINH (cygheap->shared_h);