@@ -19,12 +19,13 @@ use std::{
19
19
use rosidl_runtime_rs:: Message ;
20
20
21
21
use crate :: {
22
- rcl_bindings:: * , ActionClient , ActionClientBase , ActionServer , ActionServerBase , CancelResponse , Client , ClientBase , ClientOptions ,
23
- ClientState , Clock , ContextHandle , GoalResponse , GoalUuid , GuardCondition , LogParams , Logger ,
24
- ParameterBuilder , ParameterInterface , ParameterVariant , Parameters , Publisher ,
25
- PublisherOptions , PublisherState , RclrsError , ServerGoalHandle , Service , ServiceBase ,
26
- ServiceOptions , ServiceState , Subscription , SubscriptionBase , SubscriptionCallback ,
27
- SubscriptionOptions , SubscriptionState , TimeSource , ToLogParams , ENTITY_LIFECYCLE_MUTEX ,
22
+ rcl_bindings:: * , ActionClient , ActionClientBase , ActionServer , ActionServerBase ,
23
+ CancelResponse , Client , ClientBase , ClientOptions , ClientState , Clock , ContextHandle ,
24
+ GoalResponse , GoalUuid , GuardCondition , LogParams , Logger , ParameterBuilder ,
25
+ ParameterInterface , ParameterVariant , Parameters , Publisher , PublisherOptions , PublisherState ,
26
+ RclrsError , ServerGoalHandle , Service , ServiceBase , ServiceOptions , ServiceState , Subscription ,
27
+ SubscriptionBase , SubscriptionCallback , SubscriptionOptions , SubscriptionState , TimeSource ,
28
+ ToLogParams , ENTITY_LIFECYCLE_MUTEX ,
28
29
} ;
29
30
30
31
// SAFETY: The functions accessing this type, including drop(), shouldn't care about the thread
@@ -284,7 +285,10 @@ impl NodeState {
284
285
T : rosidl_runtime_rs:: Service ,
285
286
{
286
287
let client = Arc :: new ( ClientState :: < T > :: new ( self , options) ?) ;
287
- self . clients_mtx . lock ( ) . unwrap ( ) . push ( Arc :: downgrade ( & client) as Weak < dyn ClientBase > ) ;
288
+ self . clients_mtx
289
+ . lock ( )
290
+ . unwrap ( )
291
+ . push ( Arc :: downgrade ( & client) as Weak < dyn ClientBase > ) ;
288
292
Ok ( client)
289
293
}
290
294
@@ -300,7 +304,9 @@ impl NodeState {
300
304
T : rosidl_runtime_rs:: Action ,
301
305
{
302
306
let action_client = Arc :: new ( ActionClient :: < T > :: new ( self , topic) ?) ;
303
- self . action_clients_mtx . lock ( ) . unwrap ( )
307
+ self . action_clients_mtx
308
+ . lock ( )
309
+ . unwrap ( )
304
310
. push ( Arc :: downgrade ( & action_client) as Weak < dyn ActionClientBase > ) ;
305
311
Ok ( action_client)
306
312
}
@@ -330,7 +336,9 @@ impl NodeState {
330
336
handle_cancel,
331
337
handle_accepted,
332
338
) ?) ;
333
- self . action_servers_mtx . lock ( ) . unwrap ( )
339
+ self . action_servers_mtx
340
+ . lock ( )
341
+ . unwrap ( )
334
342
. push ( Arc :: downgrade ( & action_server) as Weak < dyn ActionServerBase > ) ;
335
343
Ok ( action_server)
336
344
}
@@ -348,7 +356,9 @@ impl NodeState {
348
356
Arc :: clone ( & self . handle . context_handle ) ,
349
357
None ,
350
358
) ) ;
351
- self . guard_conditions_mtx . lock ( ) . unwrap ( )
359
+ self . guard_conditions_mtx
360
+ . lock ( )
361
+ . unwrap ( )
352
362
. push ( Arc :: downgrade ( & guard_condition) as Weak < GuardCondition > ) ;
353
363
guard_condition
354
364
}
@@ -369,7 +379,9 @@ impl NodeState {
369
379
Arc :: clone ( & self . handle . context_handle ) ,
370
380
Some ( Box :: new ( callback) as Box < dyn Fn ( ) + Send + Sync > ) ,
371
381
) ) ;
372
- self . guard_conditions_mtx . lock ( ) . unwrap ( )
382
+ self . guard_conditions_mtx
383
+ . lock ( )
384
+ . unwrap ( )
373
385
. push ( Arc :: downgrade ( & guard_condition) as Weak < GuardCondition > ) ;
374
386
guard_condition
375
387
}
@@ -469,7 +481,9 @@ impl NodeState {
469
481
F : Fn ( & rmw_request_id_t , T :: Request ) -> T :: Response + ' static + Send ,
470
482
{
471
483
let service = Arc :: new ( ServiceState :: < T > :: new ( self , options, callback) ?) ;
472
- self . services_mtx . lock ( ) . unwrap ( )
484
+ self . services_mtx
485
+ . lock ( )
486
+ . unwrap ( )
473
487
. push ( Arc :: downgrade ( & service) as Weak < dyn ServiceBase > ) ;
474
488
Ok ( service)
475
489
}
@@ -524,36 +538,63 @@ impl NodeState {
524
538
T : Message ,
525
539
{
526
540
let subscription = Arc :: new ( SubscriptionState :: < T > :: new ( self , options, callback) ?) ;
527
- self . subscriptions_mtx . lock ( )
541
+ self . subscriptions_mtx
542
+ . lock ( )
528
543
. unwrap ( )
529
544
. push ( Arc :: downgrade ( & subscription) as Weak < dyn SubscriptionBase > ) ;
530
545
Ok ( subscription)
531
546
}
532
547
533
548
/// Returns the subscriptions that have not been dropped yet.
534
549
pub ( crate ) fn live_subscriptions ( & self ) -> Vec < Arc < dyn SubscriptionBase > > {
535
- self . subscriptions_mtx . lock ( ) . unwrap ( )
550
+ self . subscriptions_mtx
551
+ . lock ( )
552
+ . unwrap ( )
536
553
. iter ( )
537
554
. filter_map ( Weak :: upgrade)
538
555
. collect ( )
539
556
}
540
557
541
558
pub ( crate ) fn live_clients ( & self ) -> Vec < Arc < dyn ClientBase > > {
542
- self . clients_mtx . lock ( ) . unwrap ( )
559
+ self . clients_mtx
560
+ . lock ( )
561
+ . unwrap ( )
543
562
. iter ( )
544
563
. filter_map ( Weak :: upgrade)
545
564
. collect ( )
546
565
}
547
566
548
567
pub ( crate ) fn live_guard_conditions ( & self ) -> Vec < Arc < GuardCondition > > {
549
- self . guard_conditions_mtx . lock ( ) . unwrap ( )
568
+ self . guard_conditions_mtx
569
+ . lock ( )
570
+ . unwrap ( )
550
571
. iter ( )
551
572
. filter_map ( Weak :: upgrade)
552
573
. collect ( )
553
574
}
554
575
555
576
pub ( crate ) fn live_services ( & self ) -> Vec < Arc < dyn ServiceBase > > {
556
- self . services_mtx . lock ( ) . unwrap ( )
577
+ self . services_mtx
578
+ . lock ( )
579
+ . unwrap ( )
580
+ . iter ( )
581
+ . filter_map ( Weak :: upgrade)
582
+ . collect ( )
583
+ }
584
+
585
+ pub ( crate ) fn live_action_clients ( & self ) -> Vec < Arc < dyn ActionClientBase > > {
586
+ self . action_clients_mtx
587
+ . lock ( )
588
+ . unwrap ( )
589
+ . iter ( )
590
+ . filter_map ( Weak :: upgrade)
591
+ . collect ( )
592
+ }
593
+
594
+ pub ( crate ) fn live_action_servers ( & self ) -> Vec < Arc < dyn ActionServerBase > > {
595
+ self . action_servers_mtx
596
+ . lock ( )
597
+ . unwrap ( )
557
598
. iter ( )
558
599
. filter_map ( Weak :: upgrade)
559
600
. collect ( )
0 commit comments