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