* cygtls.cc (_cygtls::remove): Reset initialized flag right away if we were

previously initialized.
* cygtls.h (_cygtls::initialized): Move nearer the end to catch situation when
Windows 98 mysteriously changes pieces of cygtls when thread is detaching.
* gendef (__sigfe_maybe): Simplify slightly.
* tlsoffsets.h: Regenerate.
This commit is contained in:
Christopher Faylor 2006-03-13 04:26:57 +00:00
parent 51f90b2f01
commit 9badd94adb
5 changed files with 112 additions and 100 deletions

View File

@ -1,3 +1,13 @@
2006-03-12 Christopher Faylor <cgf@timesys.com>
* cygtls.cc (_cygtls::remove): Reset initialized flag right away if we
were previously initialized.
* cygtls.h (_cygtls::initialized): Move nearer the end to catch
situation when Windows 98 mysteriously changes pieces of cygtls when
thread is detaching.
* gendef (__sigfe_maybe): Simplify slightly.
* tlsoffsets.h: Regenerate.
2006-03-12 Christopher Faylor <cgf@timesys.com> 2006-03-12 Christopher Faylor <cgf@timesys.com>
* cygtls.h (CYGTLS_INITIALIZED): Change to a little more unlikely value. * cygtls.h (CYGTLS_INITIALIZED): Change to a little more unlikely value.

View File

@ -147,7 +147,10 @@ _cygtls::fixup_after_fork ()
void void
_cygtls::remove (DWORD wait) _cygtls::remove (DWORD wait)
{ {
if (!isinitialized () || !locals.exitsock || exit_state >= ES_FINAL) if (!isinitialized ())
return;
initialized = 0;
if (!locals.exitsock || exit_state >= ES_FINAL)
return; return;
debug_printf ("wait %p", wait); debug_printf ("wait %p", wait);

View File

@ -144,7 +144,6 @@ struct _cygtls
sigset_t deltamask; sigset_t deltamask;
HANDLE event; HANDLE event;
int *errno_addr; int *errno_addr;
unsigned initialized;
sigset_t sigmask; sigset_t sigmask;
sigset_t sigwait_mask; sigset_t sigwait_mask;
siginfo_t *sigwait_info; siginfo_t *sigwait_info;
@ -170,6 +169,7 @@ struct _cygtls
unsigned stacklock; unsigned stacklock;
__stack_t *stackptr; __stack_t *stackptr;
__stack_t stack[TLS_STACK_SIZE]; __stack_t stack[TLS_STACK_SIZE];
unsigned initialized;
unsigned padding[0]; unsigned padding[0];
/*gentls_offsets*/ /*gentls_offsets*/

View File

@ -109,8 +109,7 @@ __sigfe_maybe:
je 1f je 1f
popl %edx popl %edx
popl %ebx popl %ebx
popl %eax ret
jmp *%eax
__sigfe: __sigfe:
pushl %ebx pushl %ebx

View File

@ -15,54 +15,54 @@
//; $tls::pevent = 20; //; $tls::pevent = 20;
//; $tls::errno_addr = -4188; //; $tls::errno_addr = -4188;
//; $tls::perrno_addr = 24; //; $tls::perrno_addr = 24;
//; $tls::initialized = -4184; //; $tls::sigmask = -4184;
//; $tls::pinitialized = 28; //; $tls::psigmask = 28;
//; $tls::sigmask = -4180; //; $tls::sigwait_mask = -4180;
//; $tls::psigmask = 32; //; $tls::psigwait_mask = 32;
//; $tls::sigwait_mask = -4176; //; $tls::sigwait_info = -4176;
//; $tls::psigwait_mask = 36; //; $tls::psigwait_info = 36;
//; $tls::sigwait_info = -4172; //; $tls::thread_context = -4172;
//; $tls::psigwait_info = 40; //; $tls::pthread_context = 40;
//; $tls::thread_context = -4168; //; $tls::thread_id = -3960;
//; $tls::pthread_context = 44; //; $tls::pthread_id = 252;
//; $tls::thread_id = -3956; //; $tls::threadkill = -3956;
//; $tls::pthread_id = 256; //; $tls::pthreadkill = 256;
//; $tls::threadkill = -3952; //; $tls::infodata = -3952;
//; $tls::pthreadkill = 260; //; $tls::pinfodata = 260;
//; $tls::infodata = -3948; //; $tls::tid = -3804;
//; $tls::pinfodata = 264; //; $tls::ptid = 408;
//; $tls::tid = -3800; //; $tls::local_clib = -3800;
//; $tls::ptid = 412; //; $tls::plocal_clib = 412;
//; $tls::local_clib = -3796; //; $tls::__dontuse = -3800;
//; $tls::plocal_clib = 416; //; $tls::p__dontuse = 412;
//; $tls::__dontuse = -3796; //; $tls::locals = -2736;
//; $tls::p__dontuse = 416; //; $tls::plocals = 1476;
//; $tls::locals = -2732; //; $tls::_ctinfo = -1104;
//; $tls::plocals = 1480; //; $tls::p_ctinfo = 3108;
//; $tls::_ctinfo = -1100; //; $tls::el = -1100;
//; $tls::p_ctinfo = 3112; //; $tls::pel = 3112;
//; $tls::el = -1096; //; $tls::andreas = -1092;
//; $tls::pel = 3116; //; $tls::pandreas = 3120;
//; $tls::andreas = -1088; //; $tls::wq = -1084;
//; $tls::pandreas = 3124; //; $tls::pwq = 3128;
//; $tls::wq = -1080; //; $tls::prev = -1056;
//; $tls::pwq = 3132; //; $tls::pprev = 3156;
//; $tls::prev = -1052; //; $tls::next = -1052;
//; $tls::pprev = 3160; //; $tls::pnext = 3160;
//; $tls::next = -1048; //; $tls::sig = -1048;
//; $tls::pnext = 3164; //; $tls::psig = 3164;
//; $tls::sig = -1044; //; $tls::incyg = -1044;
//; $tls::psig = 3168; //; $tls::pincyg = 3168;
//; $tls::incyg = -1040; //; $tls::spinning = -1040;
//; $tls::pincyg = 3172; //; $tls::pspinning = 3172;
//; $tls::spinning = -1036; //; $tls::stacklock = -1036;
//; $tls::pspinning = 3176; //; $tls::pstacklock = 3176;
//; $tls::stacklock = -1032; //; $tls::stackptr = -1032;
//; $tls::pstacklock = 3180; //; $tls::pstackptr = 3180;
//; $tls::stackptr = -1028; //; $tls::stack = -1028;
//; $tls::pstackptr = 3184; //; $tls::pstack = 3184;
//; $tls::stack = -1024; //; $tls::initialized = -4;
//; $tls::pstack = 3188; //; $tls::pinitialized = 4208;
//; $tls::padding = 0; //; $tls::padding = 0;
//; $tls::ppadding = 4212; //; $tls::ppadding = 4212;
//; __DATA__ //; __DATA__
@ -81,53 +81,53 @@
#define tls_pevent (20) #define tls_pevent (20)
#define tls_errno_addr (-4188) #define tls_errno_addr (-4188)
#define tls_perrno_addr (24) #define tls_perrno_addr (24)
#define tls_initialized (-4184) #define tls_sigmask (-4184)
#define tls_pinitialized (28) #define tls_psigmask (28)
#define tls_sigmask (-4180) #define tls_sigwait_mask (-4180)
#define tls_psigmask (32) #define tls_psigwait_mask (32)
#define tls_sigwait_mask (-4176) #define tls_sigwait_info (-4176)
#define tls_psigwait_mask (36) #define tls_psigwait_info (36)
#define tls_sigwait_info (-4172) #define tls_thread_context (-4172)
#define tls_psigwait_info (40) #define tls_pthread_context (40)
#define tls_thread_context (-4168) #define tls_thread_id (-3960)
#define tls_pthread_context (44) #define tls_pthread_id (252)
#define tls_thread_id (-3956) #define tls_threadkill (-3956)
#define tls_pthread_id (256) #define tls_pthreadkill (256)
#define tls_threadkill (-3952) #define tls_infodata (-3952)
#define tls_pthreadkill (260) #define tls_pinfodata (260)
#define tls_infodata (-3948) #define tls_tid (-3804)
#define tls_pinfodata (264) #define tls_ptid (408)
#define tls_tid (-3800) #define tls_local_clib (-3800)
#define tls_ptid (412) #define tls_plocal_clib (412)
#define tls_local_clib (-3796) #define tls___dontuse (-3800)
#define tls_plocal_clib (416) #define tls_p__dontuse (412)
#define tls___dontuse (-3796) #define tls_locals (-2736)
#define tls_p__dontuse (416) #define tls_plocals (1476)
#define tls_locals (-2732) #define tls__ctinfo (-1104)
#define tls_plocals (1480) #define tls_p_ctinfo (3108)
#define tls__ctinfo (-1100) #define tls_el (-1100)
#define tls_p_ctinfo (3112) #define tls_pel (3112)
#define tls_el (-1096) #define tls_andreas (-1092)
#define tls_pel (3116) #define tls_pandreas (3120)
#define tls_andreas (-1088) #define tls_wq (-1084)
#define tls_pandreas (3124) #define tls_pwq (3128)
#define tls_wq (-1080) #define tls_prev (-1056)
#define tls_pwq (3132) #define tls_pprev (3156)
#define tls_prev (-1052) #define tls_next (-1052)
#define tls_pprev (3160) #define tls_pnext (3160)
#define tls_next (-1048) #define tls_sig (-1048)
#define tls_pnext (3164) #define tls_psig (3164)
#define tls_sig (-1044) #define tls_incyg (-1044)
#define tls_psig (3168) #define tls_pincyg (3168)
#define tls_incyg (-1040) #define tls_spinning (-1040)
#define tls_pincyg (3172) #define tls_pspinning (3172)
#define tls_spinning (-1036) #define tls_stacklock (-1036)
#define tls_pspinning (3176) #define tls_pstacklock (3176)
#define tls_stacklock (-1032) #define tls_stackptr (-1032)
#define tls_pstacklock (3180) #define tls_pstackptr (3180)
#define tls_stackptr (-1028) #define tls_stack (-1028)
#define tls_pstackptr (3184) #define tls_pstack (3184)
#define tls_stack (-1024) #define tls_initialized (-4)
#define tls_pstack (3188) #define tls_pinitialized (4208)
#define tls_padding (0) #define tls_padding (0)
#define tls_ppadding (4212) #define tls_ppadding (4212)