Fixing broken spinlock.
This commit is contained in:
parent
c857d8da35
commit
29208a7fae
|
@ -751,12 +751,13 @@ void xeRtlEnterCriticalSection(uint32_t cs_ptr, uint32_t thread_id) {
|
||||||
|
|
||||||
uint32_t spin_wait_remaining = cs->spin_count_div_256 * 256;
|
uint32_t spin_wait_remaining = cs->spin_count_div_256 * 256;
|
||||||
spin:
|
spin:
|
||||||
if (xe_atomic_inc_32(&cs->lock_count)) {
|
if (xe_atomic_inc_32(&cs->lock_count) != 0) {
|
||||||
// If this thread already owns the CS increment the recursion count.
|
// If this thread already owns the CS increment the recursion count.
|
||||||
if (cs->owning_thread_id == thread_id) {
|
if (cs->owning_thread_id == thread_id) {
|
||||||
cs->recursion_count++;
|
cs->recursion_count++;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
xe_atomic_dec_32(&cs->lock_count);
|
||||||
|
|
||||||
// Thread was locked - spin wait.
|
// Thread was locked - spin wait.
|
||||||
if (spin_wait_remaining) {
|
if (spin_wait_remaining) {
|
||||||
|
|
Loading…
Reference in New Issue