Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2005-10-19 04:22:08 +0400
committerChristopher Faylor <me@cgf.cx>2005-10-19 04:22:08 +0400
commitb72a5c0767780b0280e145c8ad686e007fbea0a5 (patch)
tree7763b3c019e40952ea110c7e174ea13084a7a1fd
parent1f5c3042d581783dfd8ed8495ef704e9ae325cd2 (diff)
* cygtls.cc (handle_threadlist_exception): Improve diagnostic output.
* sigproc.cc (child_info::sync): Only clear hProcess when execing. (wait_sig): Protect readsig handle.
-rw-r--r--winsup/cygwin/ChangeLog7
-rw-r--r--winsup/cygwin/cygtls.cc10
-rw-r--r--winsup/cygwin/sigproc.cc5
3 files changed, 14 insertions, 8 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index eb1382e37..4fa3a5e71 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,10 @@
+2005-10-18 Christopher Faylor <cgf@timesys.com>
+
+ * cygtls.cc (handle_threadlist_exception): Improve diagnostic output.
+
+ * sigproc.cc (child_info::sync): Only clear hProcess when execing.
+ (wait_sig): Protect readsig handle.
+
2005-10-18 Corinna Vinschen <corinna@vinschen.de>
* autoload.cc (NtLockVirtualMemory): Import.
diff --git a/winsup/cygwin/cygtls.cc b/winsup/cygwin/cygtls.cc
index 3b3e86ae2..579e981f2 100644
--- a/winsup/cygwin/cygtls.cc
+++ b/winsup/cygwin/cygtls.cc
@@ -241,26 +241,24 @@ _cygtls::set_siginfo (sigpacket *pack)
extern "C" DWORD __stdcall RtlUnwind (void *, void *, void *, DWORD);
static int
-handle_threadlist_exception (EXCEPTION_RECORD *e, void *frame, CONTEXT *, void *)
+handle_threadlist_exception (EXCEPTION_RECORD *e, void *frame, CONTEXT *c, void *)
{
if (e->ExceptionCode != STATUS_ACCESS_VIOLATION)
{
- system_printf ("handle_threadlist_exception called with exception code %d\n",
- e->ExceptionCode);
+ system_printf ("unhandled exception %p at %p", e->ExceptionCode, c->Eip);
return 1;
}
sentry here;
if (threadlist_ix == BAD_IX)
{
- system_printf ("handle_threadlist_exception called with threadlist_ix %d\n",
- BAD_IX);
+ system_printf ("called with threadlist_ix %d", BAD_IX);
return 1;
}
if (!here.acquired ())
{
- system_printf ("handle_threadlist_exception couldn't aquire muto\n");
+ system_printf ("couldn't aquire muto");
return 1;
}
diff --git a/winsup/cygwin/sigproc.cc b/winsup/cygwin/sigproc.cc
index 86ac20c8b..ae44ad7f1 100644
--- a/winsup/cygwin/sigproc.cc
+++ b/winsup/cygwin/sigproc.cc
@@ -846,7 +846,7 @@ child_info::sync (pid_t pid, HANDLE& hProcess, DWORD howlong)
}
else
{
- if (type != _PROC_FORK && x == nsubproc_ready)
+ if (type == _PROC_EXEC && x == nsubproc_ready)
{
ForceCloseHandle1 (hProcess, childhProcess);
hProcess = NULL;
@@ -1057,6 +1057,7 @@ wait_sig (VOID *)
if (!CreatePipe (&readsig, &myself->sendsig, sec_user_nih (sa_buf), 0))
api_fatal ("couldn't create signal pipe, %E");
+ ProtectHandle (readsig);
sigCONT = CreateEvent (&sec_none_nih, FALSE, FALSE, NULL);
my_sendsig = myself->sendsig;
@@ -1186,7 +1187,7 @@ wait_sig (VOID *)
break;
}
- CloseHandle (readsig);
+ ForceCloseHandle (readsig);
sigproc_printf ("signal thread exiting");
ExitThread (0);
}