* exceptions.cc (sigdelayed): Move declaration to sigproc.h.
* sigproc.h (sigdelayed): Make symbol globally available. * gendef (sigdelayed): Specifically zero incyg and stacklock. * signal.cc (sigwaitinfo): Lock _my_tls and try harder to clean up signal information.
This commit is contained in:
parent
0123506d2d
commit
d57a4725b1
|
@ -1,3 +1,11 @@
|
|||
2012-08-15 Christopher Faylor <me.cygwin2012@cgf.cx>
|
||||
|
||||
* exceptions.cc (sigdelayed): Move declaration to sigproc.h.
|
||||
* sigproc.h (sigdelayed): Make symbol globally available.
|
||||
* gendef (sigdelayed): Specifically zero incyg and stacklock.
|
||||
* signal.cc (sigwaitinfo): Lock _my_tls and try harder to clean up
|
||||
signal information.
|
||||
|
||||
2012-08-15 Christopher Faylor <me.cygwin2012@cgf.cx>
|
||||
|
||||
* pinfo.cc (_pinfo::exists): Don't consider an execed process to exist.
|
||||
|
|
|
@ -37,8 +37,6 @@ details. */
|
|||
|
||||
char debugger_command[2 * NT_MAX_PATH + 20];
|
||||
|
||||
extern "C" void sigdelayed ();
|
||||
|
||||
static BOOL WINAPI ctrl_c_handler (DWORD);
|
||||
|
||||
/* This is set to indicate that we have already exited. */
|
||||
|
|
|
@ -196,8 +196,9 @@ _sigdelayed:
|
|||
xorl %ebp,%ebp
|
||||
xchgl %ebp,-4(%eax) # get return address from signal stack
|
||||
xchgl %ebp,28(%esp) # store real return address
|
||||
leave: decl $tls::incyg(%ebx)
|
||||
decl $tls::stacklock(%ebx) # unlock
|
||||
leave: xorl %eax,%eax
|
||||
movl %eax,$tls::incyg(%ebx)
|
||||
movl %eax,$tls::stacklock(%ebx) # unlock
|
||||
|
||||
popl %eax
|
||||
popl %ebx
|
||||
|
|
|
@ -590,10 +590,14 @@ sigwaitinfo (const sigset_t *set, siginfo_t *info)
|
|||
}
|
||||
else
|
||||
{
|
||||
_my_tls.lock ();
|
||||
if (info)
|
||||
*info = _my_tls.infodata;
|
||||
res = _my_tls.infodata.si_signo;
|
||||
InterlockedExchange ((LONG *) &_my_tls.sig, (LONG) 0);
|
||||
_my_tls.sig = 0;
|
||||
if (_my_tls.retaddr () == (__stack_t) sigdelayed)
|
||||
_my_tls.pop ();
|
||||
_my_tls.unlock ();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -86,6 +86,8 @@ void __stdcall sigalloc ();
|
|||
int kill_pgrp (pid_t, siginfo_t&);
|
||||
int killsys (pid_t, int);
|
||||
|
||||
extern "C" void sigdelayed ();
|
||||
|
||||
extern char myself_nowait_dummy[];
|
||||
|
||||
extern struct sigaction *global_sigs;
|
||||
|
|
Loading…
Reference in New Issue