* dcrt0.cc (dll_crt0_1): Initialize cygwin threads here only when not forking.
* fork.cc (fork_child): Initialize cygwin thread later in process to avoid allocating memory for thread stacks. * shared.cc (open_shared): Issue warning if NT and shared segment is relocated.
This commit is contained in:
		| @@ -1,3 +1,12 @@ | ||||
| 2002-10-18  Christopher Faylor  <cgf@redhat.com> | ||||
|  | ||||
| 	* dcrt0.cc (dll_crt0_1): Initialize cygwin threads here only when not | ||||
| 	forking. | ||||
| 	* fork.cc (fork_child): Initialize cygwin thread later in process to | ||||
| 	avoid allocating memory for thread stacks. | ||||
| 	* shared.cc (open_shared): Issue warning if NT and shared segment is | ||||
| 	relocated. | ||||
|  | ||||
| 2002-10-18  Christopher Faylor  <cgf@redhat.com> | ||||
|  | ||||
| 	* cygthread.cc: Bump number of cygthreads up to accommodate | ||||
|   | ||||
| @@ -573,7 +573,10 @@ dll_crt0_1 () | ||||
|   char **envp = NULL; | ||||
|  | ||||
|   if (!child_proc_info) | ||||
|     memory_init (); | ||||
|     { | ||||
|       memory_init (); | ||||
|       cygthread::init (); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       bool close_ppid_handle = false; | ||||
| @@ -616,6 +619,7 @@ dll_crt0_1 () | ||||
| 		old_title = strcpy (title_buf, spawn_info->moreinfo->old_title); | ||||
| 		cfree (spawn_info->moreinfo->old_title); | ||||
| 	      } | ||||
| 	    cygthread::init (); | ||||
| 	    break; | ||||
| 	} | ||||
|       if (close_hexec_proc) | ||||
| @@ -624,8 +628,6 @@ dll_crt0_1 () | ||||
| 	CloseHandle (child_proc_info->pppid_handle); | ||||
|     } | ||||
|  | ||||
|   cygthread::init (); | ||||
|  | ||||
|   ProtectHandle (hMainProc); | ||||
|   ProtectHandle (hMainThread); | ||||
|  | ||||
|   | ||||
| @@ -30,6 +30,7 @@ details. */ | ||||
| #include "sync.h" | ||||
| #include "shared_info.h" | ||||
| #include "cygmalloc.h" | ||||
| #include "cygthread.h" | ||||
|  | ||||
| #ifdef DEBUGGING | ||||
| static int npid; | ||||
| @@ -284,7 +285,6 @@ fork_child (HANDLE& hParent, dll *&first_dll, bool& load_dlls) | ||||
|     api_fatal ("recreate_mmaps_after_fork_failed"); | ||||
|  | ||||
|   pinfo_fixup_after_fork (); | ||||
|   signal_fixup_after_fork (); | ||||
|  | ||||
|   MALLOC_CHECK; | ||||
|  | ||||
| @@ -307,6 +307,9 @@ fork_child (HANDLE& hParent, dll *&first_dll, bool& load_dlls) | ||||
|   if (fixup_shms_after_fork ()) | ||||
|     api_fatal ("recreate_shm areas after fork failed"); | ||||
|  | ||||
|   cygthread::init (); | ||||
|   signal_fixup_after_fork (); | ||||
|  | ||||
|   /* Set thread local stuff to zero.  Under Windows 95/98 this is sometimes | ||||
|      non-zero, for some reason. | ||||
|      FIXME:  There is a memory leak here after a fork. */ | ||||
|   | ||||
| @@ -104,6 +104,10 @@ open_shared (const char *name, int n, HANDLE &shared_h, DWORD size, shared_locat | ||||
|  | ||||
|   if (!shared) | ||||
|     { | ||||
| #ifdef DEBUGGING | ||||
|       if (wincap.is_winnt ()) | ||||
| 	system_printf ("relocating shared object %s(%d) on Windows NT", name, n); | ||||
| #endif | ||||
|       /* Probably win95, so try without specifying the address.  */ | ||||
|       shared = (shared_info *) MapViewOfFileEx (shared_h, | ||||
| 				       FILE_MAP_READ|FILE_MAP_WRITE, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user