* gendef: Throughout, remove lock from xchgl since it is implied.

(__ZN7_cygtls3popEv): Avoid potential (but probably nonexistent) race when
clearing element after pop.
This commit is contained in:
Christopher Faylor 2010-07-18 20:10:22 +00:00
parent ad6319f01a
commit 3a7c5515b2
2 changed files with 16 additions and 14 deletions

View File

@ -1,3 +1,9 @@
2010-07-18 Christopher Faylor <me+cygwin@cgf.cx>
* gendef: Throughout, remove lock from xchgl since it is implied.
(__ZN7_cygtls3popEv): Avoid potential (but probably nonexistent) race
when clearing element after pop.
2010-07-15 Corinna Vinschen <corinna@vinschen.de> 2010-07-15 Corinna Vinschen <corinna@vinschen.de>
* wincap.cc (wincap_7): Set needs_count_in_si_lpres2 to false. * wincap.cc (wincap_7): Set needs_count_in_si_lpres2 to false.

View File

@ -122,11 +122,11 @@ __sigfe:
pushl %edx pushl %edx
movl %fs:4,%ebx # location of bottom of stack movl %fs:4,%ebx # location of bottom of stack
1: movl \$1,%eax # potential lock value 1: movl \$1,%eax # potential lock value
lock xchgl %eax,$tls::stacklock(%ebx) # see if we can grab it xchgl %eax,$tls::stacklock(%ebx) # see if we can grab it
movl %eax,$tls::spinning(%ebx) # flag if we are waiting for lock movl %eax,$tls::spinning(%ebx) # flag if we are waiting for lock
testl %eax,%eax # it will be zero testl %eax,%eax # it will be zero
jz 2f # if so jz 2f # if so
call _yield # should be a short-time thing, so call _yield # should be a short-time thing, so
jmp 1b # sleep and loop jmp 1b # sleep and loop
2: movl \$4,%eax # have the lock, now increment the 2: movl \$4,%eax # have the lock, now increment the
xadd %eax,$tls::stackptr(%ebx) # stack pointer and get pointer xadd %eax,$tls::stackptr(%ebx) # stack pointer and get pointer
@ -146,11 +146,11 @@ __sigbe: # return here after cygwin syscall
pushl %eax # don't clobber pushl %eax # don't clobber
1: movl %fs:4,%ebx # address of bottom of tls 1: movl %fs:4,%ebx # address of bottom of tls
movl \$1,%eax # potential lock value movl \$1,%eax # potential lock value
lock xchgl %eax,$tls::stacklock(%ebx) # see if we can grab it xchgl %eax,$tls::stacklock(%ebx) # see if we can grab it
movl %eax,$tls::spinning(%ebx) # flag if we are waiting for lock movl %eax,$tls::spinning(%ebx) # flag if we are waiting for lock
testl %eax,%eax # it will be zero testl %eax,%eax # it will be zero
jz 2f # if so jz 2f # if so
call _yield # sleep call _yield # sleep
jmp 1b # and loop jmp 1b # and loop
2: movl \$-4,%eax # now decrement aux stack 2: movl \$-4,%eax # now decrement aux stack
xadd %eax,$tls::stackptr(%ebx) # and get pointer xadd %eax,$tls::stackptr(%ebx) # and get pointer
@ -171,7 +171,7 @@ _sigreturn:
call _set_process_mask\@4 call _set_process_mask\@4
1: movl \$1,%eax # potential lock value 1: movl \$1,%eax # potential lock value
lock xchgl %eax,$tls::stacklock(%ebx) # see if we can grab it xchgl %eax,$tls::stacklock(%ebx) # see if we can grab it
movl %eax,$tls::spinning(%ebx) # flag if we are waiting for lock movl %eax,$tls::spinning(%ebx) # flag if we are waiting for lock
testl %eax,%eax # it will be zero testl %eax,%eax # it will be zero
jz 2f # if so jz 2f # if so
@ -237,13 +237,9 @@ _sigdelayed:
.global __ZN7_cygtls3popEv .global __ZN7_cygtls3popEv
__ZN7_cygtls3popEv: __ZN7_cygtls3popEv:
1: pushl %ebx 1: pushl %ebx
pushl %edx # FIXME: needed? movl %eax,%ebx # this
movl %eax,%ebx movl \$-4,%eax
movl \$-4,%edx xadd %eax,$tls::pstackptr(%ebx)
xadd %edx,$tls::pstackptr(%ebx)
xorl %eax,%eax
xchgl %eax,-4(%edx)
popl %edx # FIXME: needed?
popl %ebx popl %ebx
ret ret
@ -252,7 +248,7 @@ __ZN7_cygtls4lockEv:
pushl %ebx pushl %ebx
movl %eax,%ebx movl %eax,%ebx
1: movl \$1,%eax 1: movl \$1,%eax
lock xchgl %eax,$tls::pstacklock(%ebx) xchgl %eax,$tls::pstacklock(%ebx)
testl %eax,%eax testl %eax,%eax
jz 2f jz 2f
call _yield call _yield
@ -275,7 +271,7 @@ stabilize_sig_stack:
movl %fs:4,%ebx movl %fs:4,%ebx
incl $tls::incyg(%ebx) incl $tls::incyg(%ebx)
1: movl \$1,%eax 1: movl \$1,%eax
lock xchgl %eax,$tls::stacklock(%ebx) xchgl %eax,$tls::stacklock(%ebx)
movl %eax,$tls::spinning(%ebx) # flag if we are waiting for lock movl %eax,$tls::spinning(%ebx) # flag if we are waiting for lock
testl %eax,%eax testl %eax,%eax
jz 2f jz 2f