aboutsummaryrefslogtreecommitdiff
path: root/winsup/cygwin/exceptions.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/exceptions.cc')
-rw-r--r--winsup/cygwin/exceptions.cc22
1 files changed, 11 insertions, 11 deletions
diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc
index 66f111e..2307eb5 100644
--- a/winsup/cygwin/exceptions.cc
+++ b/winsup/cygwin/exceptions.cc
@@ -569,8 +569,9 @@ _cygtls::handle_exceptions (EXCEPTION_RECORD *e, exception_list *frame, CONTEXT
si.si_addr = (void *) in->Eip;
si.si_errno = si.si_pid = si.si_uid = 0;
- me.push ((__stack_t) ebp, true);
+ me.incyg++;
sig_send (NULL, si, &me); // Signal myself
+ me.incyg--;
e->ExceptionFlags = 0;
return 0;
}
@@ -683,7 +684,7 @@ interruptible (DWORD pc)
void __stdcall
_cygtls::interrupt_setup (int sig, void *handler, struct sigaction& siga)
{
- push ((__stack_t) sigdelayed, false);
+ push ((__stack_t) sigdelayed);
deltamask = (siga.sa_mask | SIGTOMASK (sig)) & ~SIG_NONMASKABLE;
sa_flags = siga.sa_flags;
func = (void (*) (int)) handler;
@@ -707,7 +708,7 @@ bool
_cygtls::interrupt_now (CONTEXT *ctx, int sig, void *handler,
struct sigaction& siga)
{
- push ((__stack_t) ctx->Eip, false);
+ push ((__stack_t) ctx->Eip);
interrupt_setup (sig, handler, siga);
ctx->Eip = pop ();
SetThreadContext (*this, ctx); /* Restart the thread in a new location */
@@ -740,11 +741,10 @@ setup_handler (int sig, void *handler, struct sigaction& siga, _cygtls *tls)
for (int i = 0; i < CALL_HANDLER_RETRY; i++)
{
tls->lock ();
- if (tls->incyg || tls->in_exception ())
+ if (tls->incyg)
{
- sigproc_printf ("controlled interrupt. incyg %d, exception %d, stackptr %p, stack %p, stackptr[-1] %p",
- tls->incyg, tls->in_exception (), tls->stackptr, tls->stack, tls->stackptr[-1]);
- tls->reset_exception ();
+ sigproc_printf ("controlled interrupt. stackptr %p, stack %p, stackptr[-1] %p",
+ tls->stackptr, tls->stack, tls->stackptr[-1]);
tls->interrupt_setup (sig, handler, siga);
interrupted = true;
tls->unlock ();
@@ -779,9 +779,9 @@ setup_handler (int sig, void *handler, struct sigaction& siga, _cygtls *tls)
ResumeThread (hth);
break;
}
- if (tls->incyg || tls->in_exception () || tls->spinning || tls->locked ())
- sigproc_printf ("incyg %d, in_exception %d, spinning %d, locked %d\n",
- tls->incyg, tls->in_exception (), tls->spinning, tls->locked ());
+ if (tls->incyg || tls->spinning || tls->locked ())
+ sigproc_printf ("incyg %d, spinning %d, locked %d\n",
+ tls->incyg, tls->spinning, tls->locked ());
else
{
cx.ContextFlags = CONTEXT_CONTROL | CONTEXT_INTEGER;
@@ -1052,7 +1052,7 @@ sigpacket::process ()
handler = (void *) thissig.sa_handler;
else if (tls)
return 1;
- else
+ else
handler = NULL;
if (si.si_signo == SIGKILL)