@@ -14,6 +14,7 @@ use crate::err::{
1414} ;
1515use crate :: flavors;
1616use crate :: select:: { Operation , SelectHandle , Token } ;
17+ use crate :: waker:: BlockingState ;
1718
1819/// Creates a multi-producer multi-consumer channel of unbounded capacity.
1920///
@@ -1358,6 +1359,14 @@ impl<T> fmt::Debug for IntoIter<T> {
13581359}
13591360
13601361impl < T > SelectHandle for Sender < T > {
1362+ fn start ( & self ) -> Option < BlockingState < ' _ > > {
1363+ match & self . flavor {
1364+ SenderFlavor :: Array ( chan) => chan. sender ( ) . start_ref ( ) ,
1365+ SenderFlavor :: List ( chan) => chan. sender ( ) . start_ref ( ) ,
1366+ SenderFlavor :: Zero ( chan) => chan. start ( ) ,
1367+ }
1368+ }
1369+
13611370 fn try_select ( & self , token : & mut Token ) -> bool {
13621371 match & self . flavor {
13631372 SenderFlavor :: Array ( chan) => chan. sender ( ) . try_select ( token) ,
@@ -1370,11 +1379,11 @@ impl<T> SelectHandle for Sender<T> {
13701379 None
13711380 }
13721381
1373- fn register ( & self , oper : Operation , cx : & Context ) -> bool {
1382+ fn register ( & self , oper : Operation , cx : & Context , state : Option < & BlockingState < ' _ > > ) -> bool {
13741383 match & self . flavor {
1375- SenderFlavor :: Array ( chan) => chan. sender ( ) . register ( oper, cx) ,
1376- SenderFlavor :: List ( chan) => chan. sender ( ) . register ( oper, cx) ,
1377- SenderFlavor :: Zero ( chan) => chan. sender ( ) . register ( oper, cx) ,
1384+ SenderFlavor :: Array ( chan) => chan. sender ( ) . register ( oper, cx, state ) ,
1385+ SenderFlavor :: List ( chan) => chan. sender ( ) . register ( oper, cx, state ) ,
1386+ SenderFlavor :: Zero ( chan) => chan. sender ( ) . register ( oper, cx, state ) ,
13781387 }
13791388 }
13801389
@@ -1420,6 +1429,17 @@ impl<T> SelectHandle for Sender<T> {
14201429}
14211430
14221431impl < T > SelectHandle for Receiver < T > {
1432+ fn start ( & self ) -> Option < BlockingState < ' _ > > {
1433+ match & self . flavor {
1434+ ReceiverFlavor :: Array ( chan) => chan. receiver ( ) . start_ref ( ) ,
1435+ ReceiverFlavor :: List ( chan) => chan. receiver ( ) . start_ref ( ) ,
1436+ ReceiverFlavor :: Zero ( chan) => chan. start ( ) ,
1437+ ReceiverFlavor :: At ( chan) => chan. start ( ) ,
1438+ ReceiverFlavor :: Tick ( chan) => chan. start ( ) ,
1439+ ReceiverFlavor :: Never ( chan) => chan. start ( ) ,
1440+ }
1441+ }
1442+
14231443 fn try_select ( & self , token : & mut Token ) -> bool {
14241444 match & self . flavor {
14251445 ReceiverFlavor :: Array ( chan) => chan. receiver ( ) . try_select ( token) ,
@@ -1442,14 +1462,14 @@ impl<T> SelectHandle for Receiver<T> {
14421462 }
14431463 }
14441464
1445- fn register ( & self , oper : Operation , cx : & Context ) -> bool {
1465+ fn register ( & self , oper : Operation , cx : & Context , state : Option < & BlockingState < ' _ > > ) -> bool {
14461466 match & self . flavor {
1447- ReceiverFlavor :: Array ( chan) => chan. receiver ( ) . register ( oper, cx) ,
1448- ReceiverFlavor :: List ( chan) => chan. receiver ( ) . register ( oper, cx) ,
1449- ReceiverFlavor :: Zero ( chan) => chan. receiver ( ) . register ( oper, cx) ,
1450- ReceiverFlavor :: At ( chan) => chan. register ( oper, cx) ,
1451- ReceiverFlavor :: Tick ( chan) => chan. register ( oper, cx) ,
1452- ReceiverFlavor :: Never ( chan) => chan. register ( oper, cx) ,
1467+ ReceiverFlavor :: Array ( chan) => chan. receiver ( ) . register ( oper, cx, state ) ,
1468+ ReceiverFlavor :: List ( chan) => chan. receiver ( ) . register ( oper, cx, state ) ,
1469+ ReceiverFlavor :: Zero ( chan) => chan. receiver ( ) . register ( oper, cx, state ) ,
1470+ ReceiverFlavor :: At ( chan) => chan. register ( oper, cx, state ) ,
1471+ ReceiverFlavor :: Tick ( chan) => chan. register ( oper, cx, state ) ,
1472+ ReceiverFlavor :: Never ( chan) => chan. register ( oper, cx, state ) ,
14531473 }
14541474 }
14551475
0 commit comments