- if (a_fetch_add(&b->_b_count, -1)==1) {
- b->_b_seq++;
- __wake(&b->_b_seq, -1, 0);
+ /* Ensure all threads have a vm lock before proceeding */
+ if (a_fetch_add(&b->_b_count, -1)==1-limit) {
+ a_store(&b->_b_count, 0);
+ if (b->_b_waiters2) __wake(&b->_b_count, -1, 0);