* cygtls.h (struct san): Add two int values to store the current

tls_pathbuf counters.
	(return_from_fault): Restore tls_pathbuf counters.
	(setup_fault): Save tls_pathbuf counters.
	* tlsoffset.h: Regenerate.
This commit is contained in:
Corinna Vinschen 2008-05-22 20:32:15 +00:00
parent 3ad8ec8546
commit c15121a287
3 changed files with 60 additions and 41 deletions

View File

@ -1,3 +1,11 @@
2008-05-22 Corinna Vinschen <corinna@vinschen.de>
* cygtls.h (struct san): Add two int values to store the current
tls_pathbuf counters.
(return_from_fault): Restore tls_pathbuf counters.
(setup_fault): Save tls_pathbuf counters.
* tlsoffset.h: Regenerate.
2008-05-22 Corinna Vinschen <corinna@vinschen.de> 2008-05-22 Corinna Vinschen <corinna@vinschen.de>
* sec_acl.cc (setacl): Set errno to EINVAL if user or group don't exist. * sec_acl.cc (setacl): Set errno to EINVAL if user or group don't exist.

View File

@ -48,6 +48,7 @@ class tls_pathbuf
public: public:
void destroy (); void destroy ();
friend class tmp_pathbuf; friend class tmp_pathbuf;
friend class _cygtls;
}; };
struct _local_storage struct _local_storage
@ -132,6 +133,8 @@ typedef struct
{ {
void *_myfault; void *_myfault;
int _myfault_errno; int _myfault_errno;
int _myfault_c_cnt;
int _myfault_w_cnt;
} san; } san;
/* Changes to the below structure may require acompanying changes to the very /* Changes to the below structure may require acompanying changes to the very
@ -232,14 +235,22 @@ struct _cygtls
{ {
if (andreas._myfault_errno) if (andreas._myfault_errno)
set_errno (andreas._myfault_errno); set_errno (andreas._myfault_errno);
/* Restore tls_pathbuf counters in case of error. */
locals.pathbufs.c_cnt = andreas._myfault_c_cnt;
locals.pathbufs.w_cnt = andreas._myfault_w_cnt;
__ljfault ((int *) andreas._myfault, 1); __ljfault ((int *) andreas._myfault, 1);
} }
int setup_fault (jmp_buf j, san& old_j, int myerrno) __attribute__ ((always_inline)) int setup_fault (jmp_buf j, san& old_j, int myerrno) __attribute__ ((always_inline))
{ {
old_j._myfault = andreas._myfault; old_j._myfault = andreas._myfault;
old_j._myfault_errno = andreas._myfault_errno; old_j._myfault_errno = andreas._myfault_errno;
old_j._myfault_c_cnt = andreas._myfault_c_cnt;
old_j._myfault_w_cnt = andreas._myfault_w_cnt;
andreas._myfault = (void *) j; andreas._myfault = (void *) j;
andreas._myfault_errno = myerrno; andreas._myfault_errno = myerrno;
/* Save tls_pathbuf counters. */
andreas._myfault_c_cnt = locals.pathbufs.c_cnt;
andreas._myfault_w_cnt = locals.pathbufs.w_cnt;
return __sjfault (j); return __sjfault (j);
} }
void reset_fault (san& old_j) __attribute__ ((always_inline)) void reset_fault (san& old_j) __attribute__ ((always_inline))

View File

@ -1,6 +1,6 @@
//;# autogenerated: Do not edit. //;# autogenerated: Do not edit.
//; $tls::sizeof__cygtls = 4284; //; $tls::sizeof__cygtls = 4292;
//; $tls::func = -12700; //; $tls::func = -12700;
//; $tls::pfunc = 0; //; $tls::pfunc = 0;
//; $tls::el = -12696; //; $tls::el = -12696;
@ -43,26 +43,26 @@
//; $tls::p_ctinfo = 3188; //; $tls::p_ctinfo = 3188;
//; $tls::andreas = -9508; //; $tls::andreas = -9508;
//; $tls::pandreas = 3192; //; $tls::pandreas = 3192;
//; $tls::wq = -9500; //; $tls::wq = -9492;
//; $tls::pwq = 3200; //; $tls::pwq = 3208;
//; $tls::prev = -9472; //; $tls::prev = -9464;
//; $tls::pprev = 3228; //; $tls::pprev = 3236;
//; $tls::next = -9468; //; $tls::next = -9460;
//; $tls::pnext = 3232; //; $tls::pnext = 3240;
//; $tls::sig = -9464; //; $tls::sig = -9456;
//; $tls::psig = 3236; //; $tls::psig = 3244;
//; $tls::incyg = -9460; //; $tls::incyg = -9452;
//; $tls::pincyg = 3240; //; $tls::pincyg = 3248;
//; $tls::spinning = -9456; //; $tls::spinning = -9448;
//; $tls::pspinning = 3244; //; $tls::pspinning = 3252;
//; $tls::stacklock = -9452; //; $tls::stacklock = -9444;
//; $tls::pstacklock = 3248; //; $tls::pstacklock = 3256;
//; $tls::stackptr = -9448; //; $tls::stackptr = -9440;
//; $tls::pstackptr = 3252; //; $tls::pstackptr = 3260;
//; $tls::stack = -9444; //; $tls::stack = -9436;
//; $tls::pstack = 3256; //; $tls::pstack = 3264;
//; $tls::initialized = -8420; //; $tls::initialized = -8412;
//; $tls::pinitialized = 4280; //; $tls::pinitialized = 4288;
//; __DATA__ //; __DATA__
#define tls_func (-12700) #define tls_func (-12700)
@ -107,23 +107,23 @@
#define tls_p_ctinfo (3188) #define tls_p_ctinfo (3188)
#define tls_andreas (-9508) #define tls_andreas (-9508)
#define tls_pandreas (3192) #define tls_pandreas (3192)
#define tls_wq (-9500) #define tls_wq (-9492)
#define tls_pwq (3200) #define tls_pwq (3208)
#define tls_prev (-9472) #define tls_prev (-9464)
#define tls_pprev (3228) #define tls_pprev (3236)
#define tls_next (-9468) #define tls_next (-9460)
#define tls_pnext (3232) #define tls_pnext (3240)
#define tls_sig (-9464) #define tls_sig (-9456)
#define tls_psig (3236) #define tls_psig (3244)
#define tls_incyg (-9460) #define tls_incyg (-9452)
#define tls_pincyg (3240) #define tls_pincyg (3248)
#define tls_spinning (-9456) #define tls_spinning (-9448)
#define tls_pspinning (3244) #define tls_pspinning (3252)
#define tls_stacklock (-9452) #define tls_stacklock (-9444)
#define tls_pstacklock (3248) #define tls_pstacklock (3256)
#define tls_stackptr (-9448) #define tls_stackptr (-9440)
#define tls_pstackptr (3252) #define tls_pstackptr (3260)
#define tls_stack (-9444) #define tls_stack (-9436)
#define tls_pstack (3256) #define tls_pstack (3264)
#define tls_initialized (-8420) #define tls_initialized (-8412)
#define tls_pinitialized (4280) #define tls_pinitialized (4288)