Skip to content

Commit 2566894

Browse files
committed
Виправити помилку переривання запуску процесів у панелі розробника
Раніше, якщо користувач натискав кнопку зупинки процесу під час його запуску, програма все одно додавала цей процес до списку активних після завершення його ініціалізації. Це призводило до того, що процес продовжував працювати всупереч бажанню користувача. Зміни у коді: - Додано перевірку, чи все ще потрібен цей процес після його запуску. - Якщо користувач встиг натиснути «зупинити» під час очікування, процес тепер автоматично отримує сигнал переривання (команда Ctrl+C), замість того щоб залишатися активним у фоновому режимі. - Це запобігає витоку пам'яті та ресурсів, забезпечуючи коректну зупинку завдань.
1 parent a905281 commit 2566894

1 file changed

Lines changed: 10 additions & 2 deletions

File tree

‎crates/dev_panel/src/dev_panel.rs‎

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -380,9 +380,17 @@ impl DevPanel {
380380
cx.spawn(async move |this, cx| {
381381
let result = task.await;
382382
this.update(cx, |this, cx| {
383-
this.starting.remove(&id);
383+
// `starting` still holds the id unless Stop was clicked during the
384+
// launch window. If it was, interrupt the process that just spawned
385+
// rather than registering it as running (which would silently undo
386+
// the user's Stop and leak the process).
387+
let still_wanted = this.starting.remove(&id);
384388
if let Ok(handle) = result {
385-
this.running.insert(id, handle);
389+
if still_wanted {
390+
this.running.insert(id, handle);
391+
} else if let Some(terminal) = handle.upgrade() {
392+
terminal.update(cx, |terminal, _| terminal.input(vec![0x03]));
393+
}
386394
}
387395
cx.notify();
388396
})

0 commit comments

Comments
 (0)