From 330cdc1a4d32347a639e1f84b0dbc4538e353900 Mon Sep 17 00:00:00 2001 From: Svyatoslav Nikolsky Date: Thu, 10 Oct 2019 11:19:23 +0300 Subject: [PATCH] Secret store: fix Instant::now() related race in net_keep_alive (#11155) * try Instant fix in SS * proper fix + add comment * fix compilation --- .../src/key_server_cluster/cluster_connections_net.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/secret-store/src/key_server_cluster/cluster_connections_net.rs b/secret-store/src/key_server_cluster/cluster_connections_net.rs index 75c0a36fa..155c0604d 100644 --- a/secret-store/src/key_server_cluster/cluster_connections_net.rs +++ b/secret-store/src/key_server_cluster/cluster_connections_net.rs @@ -467,10 +467,13 @@ fn net_maintain(data: Arc) { /// Send keep alive messages to remote nodes. fn net_keep_alive(data: Arc) { - let now = Instant::now(); let active_connections = data.active_connections(); for connection in active_connections { - let last_message_diff = now - connection.last_message_time(); + // the last_message_time could change after active_connections() call + // => we always need to call Instant::now() after getting last_message_time + let last_message_time = connection.last_message_time(); + let now = Instant::now(); + let last_message_diff = now - last_message_time; if last_message_diff > KEEP_ALIVE_DISCONNECT_INTERVAL { warn!(target: "secretstore_net", "{}: keep alive timeout for node {}", data.self_key_pair.public(), connection.node_id());