15#ifndef THREAD_FIBER_CHANNEL_WAITER_STATE_H_
16#define THREAD_FIBER_CHANNEL_WAITER_STATE_H_
18#include "thread/cases.h"
24struct ChannelWaiterState {
25 bool GetMatchingReader(
const CaseInSelectClause* absl_nonnull writer,
26 CaseInSelectClause* absl_nonnull* absl_nonnull reader)
27 const ABSL_EXCLUSIVE_TRYLOCK_FUNCTION(
true, (*reader)->selector->mu,
28 writer->selector->mu);
29 bool GetMatchingWriter(
const CaseInSelectClause* absl_nonnull reader,
30 CaseInSelectClause* absl_nonnull* absl_nonnull writer)
31 const ABSL_EXCLUSIVE_TRYLOCK_FUNCTION(
true, reader->selector->mu,
32 (*writer)->selector->mu);
35 bool GetWaitingWriter(CaseInSelectClause* absl_nonnull* absl_nonnull writer)
36 const ABSL_EXCLUSIVE_TRYLOCK_FUNCTION(
true, (*writer)->selector->mu);
40 void UnlockAndReleaseReader(CaseInSelectClause* absl_nonnull reader)
41 ABSL_UNLOCK_FUNCTION(reader->selector->mu);
42 void UnlockAndReleaseWriter(CaseInSelectClause* absl_nonnull writer)
43 ABSL_UNLOCK_FUNCTION(writer->selector->mu);
47 void CloseAndReleaseReaders();
49 internal::CaseInSelectClause* absl_nullable readers =
nullptr;
50 internal::CaseInSelectClause* absl_nullable writers =
nullptr;