* exceptions.cc (_cygtls::interrupt_now): Avoid nonsensical tests which delay
an interrupt. (setup_handler): Remove unneeded DEBUGGING handling. Ensure that stack is locked when we are about to do push/pop to it. Fix debugging output.
This commit is contained in:
parent
3a7c5515b2
commit
9134e80ac6
|
@ -1,3 +1,10 @@
|
|||
2010-07-18 Christopher Faylor <me+cygwin@cgf.cx>
|
||||
|
||||
* exceptions.cc (_cygtls::interrupt_now): Avoid nonsensical tests which
|
||||
delay an interrupt.
|
||||
(setup_handler): Remove unneeded DEBUGGING handling. Ensure that stack
|
||||
is locked when we are about to do push/pop to it. Fix debugging output.
|
||||
|
||||
2010-07-18 Christopher Faylor <me+cygwin@cgf.cx>
|
||||
|
||||
* gendef: Throughout, remove lock from xchgl since it is implied.
|
||||
|
|
|
@ -778,7 +778,7 @@ _cygtls::interrupt_now (CONTEXT *cx, int sig, void *handler,
|
|||
{
|
||||
bool interrupted;
|
||||
|
||||
if (incyg || spinning || locked () || inside_kernel (cx))
|
||||
if (incyg || inside_kernel (cx))
|
||||
interrupted = false;
|
||||
else
|
||||
{
|
||||
|
@ -861,7 +861,6 @@ setup_handler (int sig, void *handler, struct sigaction& siga, _cygtls *tls)
|
|||
break;
|
||||
}
|
||||
|
||||
tls->unlock ();
|
||||
DWORD res;
|
||||
HANDLE hth = (HANDLE) *tls;
|
||||
|
||||
|
@ -874,14 +873,7 @@ setup_handler (int sig, void *handler, struct sigaction& siga, _cygtls *tls)
|
|||
If the thread is already suspended (which can occur when a program has called
|
||||
SuspendThread on itself) then just queue the signal. */
|
||||
|
||||
#ifndef DEBUGGING
|
||||
sigproc_printf ("suspending mainthread");
|
||||
#else
|
||||
cx.ContextFlags = CONTEXT_CONTROL | CONTEXT_INTEGER;
|
||||
if (!GetThreadContext (hth, &cx))
|
||||
memset (&cx, 0, sizeof cx);
|
||||
sigproc_printf ("suspending mainthread PC %p", cx.Eip);
|
||||
#endif
|
||||
sigproc_printf ("suspending thread");
|
||||
res = SuspendThread (hth);
|
||||
/* Just set pending if thread is already suspended */
|
||||
if (res)
|
||||
|
@ -891,10 +883,11 @@ setup_handler (int sig, void *handler, struct sigaction& siga, _cygtls *tls)
|
|||
}
|
||||
cx.ContextFlags = CONTEXT_CONTROL | CONTEXT_INTEGER;
|
||||
if (!GetThreadContext (hth, &cx))
|
||||
system_printf ("couldn't get context of main thread, %E");
|
||||
system_printf ("couldn't get context of thread, %E");
|
||||
else
|
||||
interrupted = tls->interrupt_now (&cx, sig, handler, siga);
|
||||
|
||||
tls->unlock ();
|
||||
res = ResumeThread (hth);
|
||||
if (interrupted)
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue