mirror of
https://github.com/zed-industries/zed.git
synced 2024-12-25 01:34:02 +00:00
Fix telemetry-related crash on start up (#3131)
Fixes (hopefully) [#2136](https://github.com/zed-industries/community/issues/2136). Release Notes: - N/A
This commit is contained in:
commit
247cdb1e1a
1 changed files with 14 additions and 5 deletions
|
@ -4,7 +4,9 @@ use lazy_static::lazy_static;
|
||||||
use parking_lot::Mutex;
|
use parking_lot::Mutex;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use std::{env, io::Write, mem, path::PathBuf, sync::Arc, time::Duration};
|
use std::{env, io::Write, mem, path::PathBuf, sync::Arc, time::Duration};
|
||||||
use sysinfo::{Pid, PidExt, ProcessExt, System, SystemExt};
|
use sysinfo::{
|
||||||
|
CpuRefreshKind, Pid, PidExt, ProcessExt, ProcessRefreshKind, RefreshKind, System, SystemExt,
|
||||||
|
};
|
||||||
use tempfile::NamedTempFile;
|
use tempfile::NamedTempFile;
|
||||||
use util::http::HttpClient;
|
use util::http::HttpClient;
|
||||||
use util::{channel::ReleaseChannel, TryFutureExt};
|
use util::{channel::ReleaseChannel, TryFutureExt};
|
||||||
|
@ -166,8 +168,16 @@ impl Telemetry {
|
||||||
|
|
||||||
let this = self.clone();
|
let this = self.clone();
|
||||||
cx.spawn(|mut cx| async move {
|
cx.spawn(|mut cx| async move {
|
||||||
let mut system = System::new_all();
|
// Avoiding calling `System::new_all()`, as there have been crashes related to it
|
||||||
system.refresh_all();
|
let refresh_kind = RefreshKind::new()
|
||||||
|
.with_memory() // For memory usage
|
||||||
|
.with_processes(ProcessRefreshKind::everything()) // For process usage
|
||||||
|
.with_cpu(CpuRefreshKind::everything()); // For core count
|
||||||
|
|
||||||
|
let mut system = System::new_with_specifics(refresh_kind);
|
||||||
|
|
||||||
|
// Avoiding calling `refresh_all()`, just update what we need
|
||||||
|
system.refresh_specifics(refresh_kind);
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
// Waiting some amount of time before the first query is important to get a reasonable value
|
// Waiting some amount of time before the first query is important to get a reasonable value
|
||||||
|
@ -175,8 +185,7 @@ impl Telemetry {
|
||||||
const DURATION_BETWEEN_SYSTEM_EVENTS: Duration = Duration::from_secs(60);
|
const DURATION_BETWEEN_SYSTEM_EVENTS: Duration = Duration::from_secs(60);
|
||||||
smol::Timer::after(DURATION_BETWEEN_SYSTEM_EVENTS).await;
|
smol::Timer::after(DURATION_BETWEEN_SYSTEM_EVENTS).await;
|
||||||
|
|
||||||
system.refresh_memory();
|
system.refresh_specifics(refresh_kind);
|
||||||
system.refresh_processes();
|
|
||||||
|
|
||||||
let current_process = Pid::from_u32(std::process::id());
|
let current_process = Pid::from_u32(std::process::id());
|
||||||
let Some(process) = system.processes().get(¤t_process) else {
|
let Some(process) = system.processes().get(¤t_process) else {
|
||||||
|
|
Loading…
Reference in a new issue