Deleted Added
full compact
26c26
< * $FreeBSD: head/lib/libkse/sys/lock.c 115080 2003-05-16 19:58:30Z deischen $
---
> * $FreeBSD: head/lib/libkse/sys/lock.c 115278 2003-05-24 02:29:25Z deischen $
67d66
< lck->l_head->lr_waiting = 0;
87d85
< lu->lu_myreq->lr_waiting = 0;
111a110
> long lval;
129d127
< LCK_ASSERT(lu->lu_myreq->lr_waiting == 0);
172,173c170,174
< atomic_store_rel_long(&lu->lu_watchreq->lr_waiting, 1);
< while (lu->lu_watchreq->lr_locked != 0)
---
> atomic_swap_long((long *)&lu->lu_watchreq->lr_locked,
> 2, &lval);
> if (lval == 0)
> lu->lu_watchreq->lr_locked = 0;
> else
175c176
< atomic_store_rel_long(&lu->lu_watchreq->lr_waiting, 0);
---
>
189a191
> long lval;
227d228
< lu->lu_myreq->lr_waiting = 0;
241,244c242,250
< if ((lu_h->lu_watchreq->lr_waiting != 0) &&
< (lck->l_wakeup != NULL))
< /* Notify the sleeper */
< lck->l_wakeup(lck, lu_h->lu_myreq->lr_watcher);
---
> if (lck->l_wakeup != NULL) {
> atomic_swap_long(
> (long *)&lu_h->lu_watchreq->lr_locked,
> 0, &lval);
> if (lval == 2)
> /* Notify the sleeper */
> lck->l_wakeup(lck,
> lu_h->lu_myreq->lr_watcher);
> }
246c252,253
< atomic_store_rel_long(&lu_h->lu_watchreq->lr_locked, 0);
---
> atomic_store_rel_long(
> &lu_h->lu_watchreq->lr_locked, 0);
248,251c255,261
< if ((myreq->lr_waiting != 0) &&
< (lck->l_wakeup != NULL))
< /* Notify the sleeper */
< lck->l_wakeup(lck, myreq->lr_watcher);
---
> if (lck->l_wakeup != NULL) {
> atomic_swap_long((long *)&myreq->lr_locked,
> 0, &lval);
> if (lval == 2)
> /* Notify the sleeper */
> lck->l_wakeup(lck, myreq->lr_watcher);
> }
266,269c276,281
< lu->lu_myreq->lr_waiting = 0;
< if (myreq->lr_waiting != 0 && lck->l_wakeup)
< /* Notify the sleeper */
< lck->l_wakeup(lck, myreq->lr_watcher);
---
> if (lck->l_wakeup) {
> atomic_swap_long((long *)&myreq->lr_locked, 0, &lval);
> if (lval == 2)
> /* Notify the sleeper */
> lck->l_wakeup(lck, myreq->lr_watcher);
> }
280c292
< atomic_store_rel_long(&lu->lu_watchreq->lr_locked, 0);
---
> atomic_store_rel_long(&lu->lu_watchreq->lr_locked, 3);