fix: DockerData spawns insertion error.
Previously incorrectly checking spawn entry in the hashmap, now use VacantEntry matching before spawning a tokio thread
This commit is contained in:
+15
-14
@@ -178,18 +178,18 @@ impl DockerData {
|
|||||||
let all_ids = self.app_data.lock().get_all_id_state();
|
let all_ids = self.app_data.lock().get_all_id_state();
|
||||||
for (state, id) in all_ids {
|
for (state, id) in all_ids {
|
||||||
let spawn_id = SpawnId::Stats((id, self.binate));
|
let spawn_id = SpawnId::Stats((id, self.binate));
|
||||||
self.spawns
|
|
||||||
.lock()
|
if let std::collections::hash_map::Entry::Vacant(spawns) =
|
||||||
.entry(spawn_id.clone())
|
self.spawns.lock().entry(spawn_id.clone())
|
||||||
.or_insert_with(|| {
|
{
|
||||||
tokio::spawn(Self::update_container_stat(
|
spawns.insert(tokio::spawn(Self::update_container_stat(
|
||||||
Arc::clone(&self.app_data),
|
Arc::clone(&self.app_data),
|
||||||
Arc::clone(&self.docker),
|
Arc::clone(&self.docker),
|
||||||
state,
|
state,
|
||||||
spawn_id,
|
spawn_id,
|
||||||
Arc::clone(&self.spawns),
|
Arc::clone(&self.spawns),
|
||||||
))
|
)));
|
||||||
});
|
}
|
||||||
}
|
}
|
||||||
self.binate = self.binate.toggle();
|
self.binate = self.binate.toggle();
|
||||||
}
|
}
|
||||||
@@ -305,19 +305,20 @@ impl DockerData {
|
|||||||
self.update_all_containers().await;
|
self.update_all_containers().await;
|
||||||
if let Some(container) = self.app_data.lock().get_selected_container() {
|
if let Some(container) = self.app_data.lock().get_selected_container() {
|
||||||
let last_updated = container.last_updated;
|
let last_updated = container.last_updated;
|
||||||
self.spawns
|
let spawn_id = SpawnId::Log(container.id.clone());
|
||||||
.lock()
|
// Only spawn if not already sapwned with a given id/binate pair
|
||||||
.entry(SpawnId::Log(container.id.clone()))
|
if let std::collections::hash_map::Entry::Vacant(spawns) =
|
||||||
.or_insert_with(|| {
|
self.spawns.lock().entry(spawn_id)
|
||||||
tokio::spawn(Self::update_log(
|
{
|
||||||
|
spawns.insert(tokio::spawn(Self::update_log(
|
||||||
Arc::clone(&self.app_data),
|
Arc::clone(&self.app_data),
|
||||||
Arc::clone(&self.docker),
|
Arc::clone(&self.docker),
|
||||||
container.id.clone(),
|
container.id.clone(),
|
||||||
last_updated,
|
last_updated,
|
||||||
Arc::clone(&self.spawns),
|
Arc::clone(&self.spawns),
|
||||||
self.args.std_err,
|
self.args.std_err,
|
||||||
))
|
)));
|
||||||
});
|
}
|
||||||
};
|
};
|
||||||
self.update_all_container_stats();
|
self.update_all_container_stats();
|
||||||
self.app_data.lock().sort_containers();
|
self.app_data.lock().sort_containers();
|
||||||
|
|||||||
Reference in New Issue
Block a user