From 813a3732963ebe2ab84fa20c5ddf66c252610a22 Mon Sep 17 00:00:00 2001 From: cgf Date: Sun, 28 Aug 2005 23:26:21 +0000 Subject: [PATCH] * cygtls.h (__ljfault): Declare. (_cygtls::return_from_fault): Use __ljfault. * exceptions.cc (set_signal_mask): Revert previous checkin. * gendef (__sjfault): Split out into a separate function which doesn't bother with any special signal locking. routines. (_ljfault): Return from a __sjfault without bothering with signals. --- winsup/cygwin/ChangeLog | 9 ++++++ winsup/cygwin/cygtls.h | 4 ++- winsup/cygwin/exceptions.cc | 4 ++- winsup/cygwin/gendef | 69 +++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 82 insertions(+), 4 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index a1321c57de..5886f06b43 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,5 +1,14 @@ 2005-08-28 Christopher Faylor + * cygtls.h (__ljfault): Declare. + (_cygtls::return_from_fault): Use __ljfault. + * exceptions.cc (set_signal_mask): Revert previous checkin. + * gendef (__sjfault): Split out into a separate function which doesn't + bother with any special signal locking. routines. + (_ljfault): Return from a __sjfault without bothering with signals. + +2005-08-28 Christopher Faylor + * cygtls.h (_local_storage::strerror_buf): Allocate more space. * errno.cc (strerror_worker): New function, adapted from strerror. (strerror): Use strerror_worker. diff --git a/winsup/cygwin/cygtls.h b/winsup/cygwin/cygtls.h index 777031cd1e..6275318495 100644 --- a/winsup/cygwin/cygtls.h +++ b/winsup/cygwin/cygtls.h @@ -148,6 +148,8 @@ typedef struct struct_waitq #include "cygerrno.h" extern "C" int __sjfault (jmp_buf); +extern "C" int __ljfault (jmp_buf, int); + /*gentls_offsets*/ typedef __uint32_t __stack_t; @@ -223,7 +225,7 @@ struct _cygtls { if (_myfault_errno) set_errno (_myfault_errno); - longjmp ((int *) _myfault, 1); + __ljfault ((int *) _myfault, 1); } int setup_fault (jmp_buf j, int myerrno) __attribute__ ((always_inline)) { diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc index 98539d41d0..eaad588bd4 100644 --- a/winsup/cygwin/exceptions.cc +++ b/winsup/cygwin/exceptions.cc @@ -978,17 +978,19 @@ set_process_mask_delta () extern "C" void __stdcall set_signal_mask (sigset_t newmask, sigset_t& oldmask) { + if (GetCurrentThreadId () == sigtid) + small_printf ("********* waiting in signal thread\n"); mask_sync.acquire (INFINITE); newmask &= ~SIG_NONMASKABLE; sigset_t mask_bits = oldmask & ~newmask; sigproc_printf ("oldmask %p, newmask %p, mask_bits %p", oldmask, newmask, mask_bits); oldmask = newmask; - mask_sync.release (); if (mask_bits) sig_dispatch_pending (true); else sigproc_printf ("not calling sig_dispatch_pending"); + mask_sync.release (); return; } diff --git a/winsup/cygwin/gendef b/winsup/cygwin/gendef index 9d8a211e67..e743ebcfcb 100755 --- a/winsup/cygwin/gendef +++ b/winsup/cygwin/gendef @@ -272,9 +272,8 @@ EOF sub longjmp { return <