* shared_info.h (shared_destroy): Declare.

* shared.cc (shared_destroy): Define new function to destroy shared memory
regions.
* init.cc (dll_entry): Call shared_destroy when dll detaches from the process.
This commit is contained in:
Christopher Faylor 2008-07-27 14:52:46 +00:00
parent bfd2b1c930
commit 904413e731
4 changed files with 22 additions and 1 deletions

View File

@ -1,3 +1,11 @@
2008-07-27 Christopher Faylor <me+cygwin@cgf.cx>
* shared_info.h (shared_destroy): Declare.
* shared.cc (shared_destroy): Define new function to destroy shared
memory regions.
* init.cc (dll_entry): Call shared_destroy when dll detaches from the
process.
2008-07-27 Corinna Vinschen <corinna@vinschen.de> 2008-07-27 Corinna Vinschen <corinna@vinschen.de>
* fhandler_socket.cc (fhandler_socket::send_internal): Send never more * fhandler_socket.cc (fhandler_socket::send_internal): Send never more

View File

@ -12,6 +12,7 @@ details. */
#include "winsup.h" #include "winsup.h"
#include "cygtls.h" #include "cygtls.h"
#include "ntdll.h" #include "ntdll.h"
#include "shared_info.h"
static DWORD _my_oldfunc; static DWORD _my_oldfunc;
@ -142,6 +143,8 @@ dll_entry (HANDLE h, DWORD reason, void *static_load)
_my_oldfunc = TlsAlloc (); _my_oldfunc = TlsAlloc ();
break; break;
case DLL_PROCESS_DETACH: case DLL_PROCESS_DETACH:
if (dynamically_loaded)
shared_destroy ();
break; break;
case DLL_THREAD_ATTACH: case DLL_THREAD_ATTACH:
if (hwait_sig) if (hwait_sig)

View File

@ -254,6 +254,15 @@ user_shared_initialize (bool reinit)
} }
} }
void __stdcall
shared_destroy ()
{
ForceCloseHandle (cygwin_shared_h);
UnmapViewOfFile (cygwin_shared);
ForceCloseHandle (cygwin_user_h);
UnmapViewOfFile (user_shared);
}
/* Use absolute path of cygwin1.dll to derive the Win32 dir which /* Use absolute path of cygwin1.dll to derive the Win32 dir which
is our installation root. Note that we can't handle Cygwin installation is our installation root. Note that we can't handle Cygwin installation
root dirs of more than 4K path length. I assume that's ok... */ root dirs of more than 4K path length. I assume that's ok... */

View File

@ -120,7 +120,7 @@ public:
#define SHARED_INFO_CB 39328 #define SHARED_INFO_CB 39328
#define CURR_SHARED_MAGIC 0x22f9ff0bU #define CURR_SHARED_MAGIC 0x398d8baU
/* NOTE: Do not make gratuitous changes to the names or organization of the /* NOTE: Do not make gratuitous changes to the names or organization of the
below class. The layout is checksummed to determine compatibility between below class. The layout is checksummed to determine compatibility between
@ -164,6 +164,7 @@ enum shared_locations
}; };
void __stdcall memory_init (); void __stdcall memory_init ();
void __stdcall shared_destroy ();
#define shared_align_past(p) \ #define shared_align_past(p) \
((char *) (system_info.dwAllocationGranularity * \ ((char *) (system_info.dwAllocationGranularity * \