* debug.cc: Avoid explicit zeroing of globals.
(lock_debug): Make locker a static member. Avoid unlocking when already unlocked (from Conrad Scott). (debug_init): Initialize lock_debug::locker here. * fork.cc (fork_child): Fix up fdtab earlier to avoid some (but not all) confusion with close-on-exec craziness.
This commit is contained in:
		
							parent
							
								
									f6b5a68428
								
							
						
					
					
						commit
						1f5ff38778
					
				|  | @ -1,3 +1,12 @@ | |||
| 2002-07-09  Christopher Faylor  <cgf@redhat.com> | ||||
| 
 | ||||
| 	* debug.cc: Avoid explicit zeroing of globals. | ||||
| 	(lock_debug): Make locker a static member.  Avoid unlocking when | ||||
| 	already unlocked (from Conrad Scott). | ||||
| 	(debug_init): Initialize lock_debug::locker here. | ||||
| 	* fork.cc (fork_child): Fix up fdtab earlier to avoid some (but not | ||||
| 	all) confusion with close-on-exec craziness. | ||||
| 
 | ||||
| 2002-07-05  Corinna Vinschen  <corinna@vinschen.de> | ||||
| 
 | ||||
| 	* fhandler.h (fhandler_socket::is_unconnected): Constify. | ||||
|  |  | |||
|  | @ -176,27 +176,45 @@ typedef struct _h | |||
|     struct _h *next; | ||||
|   } handle_list; | ||||
| 
 | ||||
| static NO_COPY handle_list starth = {0, NULL, NULL, NULL, 0, 0, NULL}; | ||||
| static NO_COPY handle_list *endh = NULL; | ||||
| static NO_COPY handle_list starth; | ||||
| static NO_COPY handle_list *endh; | ||||
| 
 | ||||
| static handle_list NO_COPY freeh[1000] = {{0, NULL, NULL, NULL, 0, 0, NULL}}; | ||||
| static NO_COPY handle_list freeh[1000]; | ||||
| #define NFREEH (sizeof (freeh) / sizeof (freeh[0])) | ||||
| 
 | ||||
| static muto NO_COPY *debug_lock = NULL; | ||||
| void debug_init (); | ||||
| 
 | ||||
| struct lock_debug | ||||
| class lock_debug | ||||
| { | ||||
|   lock_debug () {if (debug_lock) debug_lock->acquire (INFINITE);} | ||||
|   void unlock () {if (debug_lock) debug_lock->release ();} | ||||
|   static muto *locker; | ||||
|   bool acquired; | ||||
|  public: | ||||
|   lock_debug () : acquired (0) | ||||
|   { | ||||
|     if (locker) | ||||
|       acquired = !!locker->acquire (INFINITE); | ||||
|   } | ||||
|   void unlock () | ||||
|   { | ||||
|     if (locker && acquired) | ||||
|       { | ||||
| 	locker->release (); | ||||
| 	acquired = false; | ||||
|       } | ||||
|   } | ||||
|   ~lock_debug () {unlock ();} | ||||
|   friend void debug_init (); | ||||
| }; | ||||
| 
 | ||||
| muto NO_COPY *lock_debug::locker = NULL; | ||||
| 
 | ||||
| static bool __stdcall mark_closed (const char *, int, HANDLE, const char *, BOOL); | ||||
| 
 | ||||
| void | ||||
| debug_init () | ||||
| { | ||||
|   new_muto (debug_lock); | ||||
|   muto *debug_lock_muto; | ||||
|   lock_debug::locker = new_muto (debug_lock_muto); | ||||
| } | ||||
| 
 | ||||
| /* Find a registered handle in the linked list of handles. */ | ||||
|  | @ -296,6 +314,7 @@ delete_handle (handle_list *hl) | |||
| void | ||||
| debug_fixup_after_fork () | ||||
| { | ||||
|   /* No lock needed at this point */ | ||||
|   handle_list *hl; | ||||
|   for (hl = &starth; hl->next != NULL; hl = hl->next) | ||||
|     if (hl->next->clexec_pid) | ||||
|  |  | |||
|  | @ -243,7 +243,6 @@ fork_child (HANDLE& hParent, dll *&first_dll, bool& load_dlls) | |||
|     } | ||||
| 
 | ||||
|   sync_with_parent ("after longjmp.", TRUE); | ||||
|   ProtectHandle (hParent); | ||||
|   sigproc_printf ("hParent %p, child 1 first_dll %p, load_dlls %d\n", hParent, | ||||
| 		  first_dll, load_dlls); | ||||
| 
 | ||||
|  | @ -275,9 +274,11 @@ fork_child (HANDLE& hParent, dll *&first_dll, bool& load_dlls) | |||
| 
 | ||||
|   MALLOC_CHECK; | ||||
| 
 | ||||
|   cygheap->fdtab.fixup_after_fork (hParent); | ||||
|   ProtectHandle (hParent); | ||||
| 
 | ||||
|   debug_fixup_after_fork (); | ||||
|   pinfo_fixup_after_fork (); | ||||
|   cygheap->fdtab.fixup_after_fork (hParent); | ||||
|   signal_fixup_after_fork (); | ||||
| 
 | ||||
|   MALLOC_CHECK; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue