@@ -25,7 +25,7 @@ use zenoh_result::ZResult;
2525
2626use super :: sample:: QoSBuilderTrait ;
2727#[ cfg( feature = "unstable" ) ]
28- use crate :: api:: cancellation:: CancellationTokenBuilderTrait ;
28+ use crate :: api:: cancellation:: { CancellationToken , CancellationTokenBuilderTrait } ;
2929#[ cfg( feature = "unstable" ) ]
3030use crate :: api:: query:: ReplyKeyExpr ;
3131#[ cfg( feature = "unstable" ) ]
@@ -191,6 +191,8 @@ impl Wait for QuerierBuilder<'_, '_> {
191191 #[ cfg( feature = "unstable" ) ]
192192 accept_replies : self . accept_replies ,
193193 matching_listeners : Default :: default ( ) ,
194+ #[ cfg( feature = "unstable" ) ]
195+ cancellation_token : CancellationToken :: default ( ) ,
194196 } )
195197 }
196198}
@@ -473,19 +475,7 @@ where
473475 Handler :: Handler : Send ,
474476{
475477 fn wait ( self ) -> <Self as Resolvable >:: To {
476- #[ allow( unused_mut) ] // mut is needed only for unstable cancellation_token
477- let ( mut callback, receiver) = self . handler . into_handler ( ) ;
478- #[ cfg( feature = "unstable" ) ]
479- let cancellation_token = if let Some ( ct) = self . cancellation_token {
480- if let Some ( notifier) = ct. notifier ( ) {
481- callback. set_on_drop_notifier ( notifier) ;
482- Some ( ct)
483- } else {
484- return Ok ( receiver) ;
485- }
486- } else {
487- None
488- } ;
478+ let ( callback, receiver) = self . handler . into_handler ( ) ;
489479 #[ allow( unused_mut) ]
490480 // mut is only needed when building with "unstable" feature, which might add extra internal parameters on top of the user-provided ones
491481 let mut parameters = self . parameters . clone ( ) ;
@@ -494,34 +484,26 @@ where
494484 parameters. set_reply_key_expr_any ( ) ;
495485 }
496486 #[ allow( unused_variables) ] // qid is only needed for unstable cancellation_token
497- self . querier
498- . session
499- . query (
500- & self . querier . key_expr ,
501- & parameters,
502- self . querier . target ,
503- self . querier . consolidation ,
504- self . querier . qos ,
505- self . querier . destination ,
506- self . querier . timeout ,
507- self . value ,
508- self . attachment ,
509- #[ cfg( feature = "unstable" ) ]
510- self . source_info ,
511- callback,
512- )
513- . map ( |qid| {
514- #[ cfg( feature = "unstable" ) ]
515- if let Some ( cancellation_token) = cancellation_token {
516- let weak_session = self . querier . session . clone ( ) ;
517- let on_cancel = move || {
518- let _ = weak_session. cancel_query ( qid) ; // fails only if no associated query exists - likely because it was already finalized
519- Ok ( ( ) )
520- } ;
521- cancellation_token. add_on_cancel_handler ( Box :: new ( on_cancel) ) ;
522- }
523- receiver
524- } )
487+ self . querier . session . query (
488+ & self . querier . key_expr ,
489+ & parameters,
490+ self . querier . target ,
491+ self . querier . consolidation ,
492+ self . querier . qos ,
493+ self . querier . destination ,
494+ self . querier . timeout ,
495+ self . value ,
496+ self . attachment ,
497+ #[ cfg( feature = "unstable" ) ]
498+ self . source_info ,
499+ callback,
500+ #[ cfg( feature = "unstable" ) ]
501+ match self . cancellation_token {
502+ Some ( ct) => vec ! [ self . querier. cancellation_token. clone( ) , ct] ,
503+ None => vec ! [ self . querier. cancellation_token. clone( ) ] ,
504+ } ,
505+ ) ?;
506+ Ok ( receiver)
525507 }
526508}
527509
0 commit comments