* 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.
This commit is contained in:
		| @@ -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'. | ||||
|   | ||||
| @@ -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)) | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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; | ||||
|   }; | ||||
|   | ||||
| @@ -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 *); | ||||
|   | ||||
| @@ -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 | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -143,8 +143,6 @@ memory_init () | ||||
|       cygheap->user.set_name (user_name); | ||||
|     } | ||||
|  | ||||
|   debug_init (); | ||||
|  | ||||
|   cygheap->shared_h = shared_h; | ||||
|   ProtectHandleINH (cygheap->shared_h); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user