@@ -12,7 +12,7 @@ use std::sync::{Arc, Mutex};
12
12
/// to the `/clock` topic and drive the attached clocks
13
13
pub struct TimeSource {
14
14
_node : Arc < Node > ,
15
- _clocks : Arc < Mutex < Vec < Arc < Mutex < Clock > > > > > ,
15
+ _clocks : Arc < Mutex < Vec < Arc < Clock > > > > ,
16
16
_clock_qos : QoSProfile ,
17
17
// TODO(luca) implement clock threads, for now will run in main thread
18
18
_use_clock_thread : bool ,
@@ -39,14 +39,14 @@ pub struct TimeSourceBuilder {
39
39
node : Arc < Node > ,
40
40
clock_qos : QoSProfile ,
41
41
use_clock_thread : bool ,
42
- clock : Arc < Mutex < Clock > > ,
42
+ clock : Arc < Clock > ,
43
43
}
44
44
45
45
impl TimeSourceBuilder {
46
46
/// Creates a builder for a time source that drives the given clock for the given node.
47
47
/// The clock's ClockType must be set to `RosTime` to allow updates based on the `/clock`
48
48
/// topic.
49
- pub fn new ( node : Arc < Node > , clock : Arc < Mutex < Clock > > ) -> Self {
49
+ pub fn new ( node : Arc < Node > , clock : Arc < Clock > ) -> Self {
50
50
Self {
51
51
node,
52
52
clock_qos : QOS_PROFILE_CLOCK ,
@@ -102,13 +102,13 @@ impl fmt::Display for ClockMismatchError {
102
102
103
103
impl TimeSource {
104
104
/// Creates a new time source with default parameters.
105
- pub fn new ( node : Arc < Node > , clock : Arc < Mutex < Clock > > ) -> Self {
105
+ pub fn new ( node : Arc < Node > , clock : Arc < Clock > ) -> Self {
106
106
TimeSourceBuilder :: new ( node, clock) . build ( )
107
107
}
108
108
109
109
/// Attaches the given clock to the `TimeSource`, enabling the `TimeSource` to control it.
110
- pub fn attach_clock ( & self , clock : Arc < Mutex < Clock > > ) -> Result < ( ) , ClockMismatchError > {
111
- let clock_type = clock. clone ( ) . lock ( ) . unwrap ( ) . clock_type ( ) ;
110
+ pub fn attach_clock ( & self , clock : Arc < Clock > ) -> Result < ( ) , ClockMismatchError > {
111
+ let clock_type = clock. clock_type ( ) ;
112
112
if !matches ! ( clock_type, ClockType :: RosTime ) && * self . _ros_time_active . lock ( ) . unwrap ( ) {
113
113
return Err ( ClockMismatchError ( clock_type) ) ;
114
114
}
@@ -126,7 +126,7 @@ impl TimeSource {
126
126
127
127
/// Detaches the given clock from the `TimeSource`.
128
128
// TODO(luca) should we return a result to denote whether the clock was removed?
129
- pub fn detach_clock ( & self , clock : Arc < Mutex < Clock > > ) {
129
+ pub fn detach_clock ( & self , clock : Arc < Clock > ) {
130
130
self . _clocks
131
131
. lock ( )
132
132
. unwrap ( )
@@ -159,7 +159,7 @@ impl TimeSource {
159
159
if enable != * ros_time_active {
160
160
* ros_time_active = enable;
161
161
for clock in self . _clocks . lock ( ) . unwrap ( ) . iter ( ) {
162
- clock. lock ( ) . unwrap ( ) . set_ros_time ( enable) ;
162
+ clock. set_ros_time ( enable) ;
163
163
}
164
164
if enable {
165
165
self . _clock_subscription = Some ( self . create_clock_sub ( ) ?) ;
@@ -170,12 +170,11 @@ impl TimeSource {
170
170
Ok ( ( ) )
171
171
}
172
172
173
- fn update_clock ( clock : & Arc < Mutex < Clock > > , nanoseconds : i64 ) {
174
- let clock = clock. lock ( ) . unwrap ( ) ;
173
+ fn update_clock ( clock : & Arc < Clock > , nanoseconds : i64 ) {
175
174
clock. set_ros_time_override ( nanoseconds) ;
176
175
}
177
176
178
- fn update_all_clocks ( clocks : & Arc < Mutex < Vec < Arc < Mutex < Clock > > > > > , nanoseconds : i64 ) {
177
+ fn update_all_clocks ( clocks : & Arc < Mutex < Vec < Arc < Clock > > > > , nanoseconds : i64 ) {
179
178
let clocks = clocks. lock ( ) . unwrap ( ) ;
180
179
for clock in clocks. iter ( ) {
181
180
Self :: update_clock ( clock, nanoseconds) ;
0 commit comments