* globals.cc (hntdll): Define/declare.

* exceptions.cc (inside_kernel): Don't call GetModuleFileName if we know we're
in ntdll.
* sigproc.cc (wait_sig): Initialize hntdll.
This commit is contained in:
Christopher Faylor 2013-12-09 20:32:24 +00:00
parent db0d50a67d
commit ae8456bdf2
4 changed files with 13 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2013-12-09 Christopher Faylor <me.cygwin2013@cgf.cx>
* globals.cc (hntdll): Define/declare.
* exceptions.cc (inside_kernel): Don't call GetModuleFileName if we
know we're in ntdll.
* sigproc.cc (wait_sig): Initialize hntdll.
2013-12-09 Corinna Vinschen <corinna@vinschen.de> 2013-12-09 Corinna Vinschen <corinna@vinschen.de>
* include/cygwin/stdlib.h (initstate, random, setstate, srandom): * include/cygwin/stdlib.h (initstate, random, setstate, srandom):

View File

@ -394,6 +394,9 @@ _cygtls::inside_kernel (CONTEXT *cx)
# define h ((HMODULE) m.AllocationBase) # define h ((HMODULE) m.AllocationBase)
if (!h || m.State != MEM_COMMIT) /* Be defensive */ if (!h || m.State != MEM_COMMIT) /* Be defensive */
res = true; res = true;
else if (h == hntdll)
res = true; /* Calling GetModuleFilename on ntdll.dll
can hang */
else if (h == user_data->hmodule) else if (h == user_data->hmodule)
res = false; res = false;
else if (!GetModuleFileNameW (h, checkdir, windows_system_directory_length + 6)) else if (!GetModuleFileNameW (h, checkdir, windows_system_directory_length + 6))

View File

@ -23,6 +23,7 @@ HANDLE NO_COPY hProcToken;
HANDLE NO_COPY hProcImpToken; HANDLE NO_COPY hProcImpToken;
HANDLE my_wr_proc_pipe; HANDLE my_wr_proc_pipe;
HMODULE NO_COPY cygwin_hmodule; HMODULE NO_COPY cygwin_hmodule;
HMODULE NO_COPY hntdll;
int NO_COPY sigExeced; int NO_COPY sigExeced;
WCHAR windows_system_directory[MAX_PATH]; WCHAR windows_system_directory[MAX_PATH];
UINT windows_system_directory_length; UINT windows_system_directory_length;

View File

@ -1205,6 +1205,8 @@ wait_sig (VOID *)
sigproc_printf ("entering ReadFile loop, my_readsig %p, my_sendsig %p", sigproc_printf ("entering ReadFile loop, my_readsig %p, my_sendsig %p",
my_readsig, my_sendsig); my_readsig, my_sendsig);
hntdll = GetModuleHandle ("ntdll.dll");
for (;;) for (;;)
{ {
DWORD nb; DWORD nb;