TS_SHARED_QUEUE
turnstile_wait(ts, NULL, TS_SHARED_QUEUE);
turnstile_broadcast(ts, TS_SHARED_QUEUE);
queue = TS_SHARED_QUEUE;
queue == TS_SHARED_QUEUE ? "read" : "write");
turnstile_broadcast(ts, TS_SHARED_QUEUE);
turnstile_wait(ts, owner, TS_SHARED_QUEUE);
queue = TS_SHARED_QUEUE;
!TAILQ_EMPTY(&ts->ts_blocked[TS_SHARED_QUEUE]));
MPASS(queue == TS_SHARED_QUEUE || queue == TS_EXCLUSIVE_QUEUE);
MPASS(queue == TS_SHARED_QUEUE || queue == TS_EXCLUSIVE_QUEUE);
print_queue(&ts->ts_blocked[TS_SHARED_QUEUE], "Shared Waiters", "\t");
TAILQ_FOREACH(td, &ts->ts_blocked[TS_SHARED_QUEUE], td_lockq)
MPASS(queue == TS_EXCLUSIVE_QUEUE || queue == TS_SHARED_QUEUE);
td->td_tsqueue == TS_SHARED_QUEUE);
MPASS(TAILQ_EMPTY(&ts->ts_blocked[TS_SHARED_QUEUE]));
TAILQ_INIT(&ts->ts_blocked[TS_SHARED_QUEUE]);
std = TAILQ_FIRST(&ts->ts_blocked[TS_SHARED_QUEUE]);
MPASS(queue == TS_SHARED_QUEUE || queue == TS_EXCLUSIVE_QUEUE);
KASSERT(TAILQ_EMPTY(&ts->ts_blocked[TS_SHARED_QUEUE]),
MPASS(queue == TS_SHARED_QUEUE || queue == TS_EXCLUSIVE_QUEUE);
TAILQ_EMPTY(&ts->ts_blocked[TS_SHARED_QUEUE]);
MPASS(queue == TS_SHARED_QUEUE || queue == TS_EXCLUSIVE_QUEUE);
TAILQ_EMPTY(&ts->ts_blocked[TS_SHARED_QUEUE]))