Skip to content

Commit 2d3cdf7

Browse files
fix(rust): fix session life cycle (#646)
* fix(rust): fix session life cycle Signed-off-by: SSpirits <admin@lv5.moe> * fix(rust): fix session life cycle Signed-off-by: SSpirits <admin@lv5.moe> --------- Signed-off-by: SSpirits <admin@lv5.moe>
1 parent c38f7d5 commit 2d3cdf7

2 files changed

Lines changed: 9 additions & 8 deletions

File tree

rust/src/client.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,14 +190,14 @@ impl Client {
190190
},
191191
command = telemetry_command_rx.recv() => {
192192
if let Some(command) = command {
193-
let result = Self::handle_telemetry_command(rpc_client.clone(), &transaction_checker, endpoints.clone(), command).await;
193+
let result = Self::handle_telemetry_command(rpc_client.shadow_session(), &transaction_checker, endpoints.clone(), command).await;
194194
if let Err(error) = result {
195195
error!(logger, "handle telemetry command failed: {:?}", error);
196196
}
197197
}
198198
},
199199
_ = &mut shutdown_rx => {
200-
debug!(logger, "receive shutdown signal, stop heartbeat task and telemetry command handler");
200+
info!(logger, "receive shutdown signal, stop heartbeat task and telemetry command handler");
201201
break;
202202
}
203203
}

rust/src/session.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,8 @@ pub(crate) struct Session {
102102
shutdown_tx: Option<oneshot::Sender<()>>,
103103
}
104104

105-
impl Clone for Session {
106-
fn clone(&self) -> Self {
105+
impl Session {
106+
pub(crate) fn shadow_session(&self) -> Self {
107107
Session {
108108
logger: self.logger.clone(),
109109
client_id: self.client_id.clone(),
@@ -580,7 +580,7 @@ impl SessionManager {
580580
let mut session_map = self.session_map.lock().await;
581581
let endpoint_url = endpoints.endpoint_url().to_string();
582582
return if session_map.contains_key(&endpoint_url) {
583-
Ok(session_map.get(&endpoint_url).unwrap().clone())
583+
Ok(session_map.get(&endpoint_url).unwrap().shadow_session())
584584
} else {
585585
let mut session = Session::new(
586586
&self.logger,
@@ -590,16 +590,17 @@ impl SessionManager {
590590
)
591591
.await?;
592592
session.start(settings, telemetry_command_tx).await?;
593-
session_map.insert(endpoint_url.clone(), session.clone());
594-
Ok(session)
593+
let shadow_session = session.shadow_session();
594+
session_map.insert(endpoint_url.clone(), session);
595+
Ok(shadow_session)
595596
};
596597
}
597598

598599
pub(crate) async fn get_all_sessions(&self) -> Result<Vec<Session>, ClientError> {
599600
let session_map = self.session_map.lock().await;
600601
let mut sessions = Vec::new();
601602
for (_, session) in session_map.iter() {
602-
sessions.push(session.clone());
603+
sessions.push(session.shadow_session());
603604
}
604605
Ok(sessions)
605606
}

0 commit comments

Comments
 (0)