mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-28 04:23:32 +01:00
cli: automatically remove servers that fail to start (#211500)
Fixes https://github.com/microsoft/vscode-remote-release/issues/9823
This commit is contained in:
@@ -760,17 +760,18 @@ async fn handle_serve(
|
||||
macro_rules! do_setup {
|
||||
($sb:expr) => {
|
||||
match $sb.get_running().await? {
|
||||
Some(AnyCodeServer::Socket(s)) => s,
|
||||
Some(AnyCodeServer::Socket(s)) => ($sb, Ok(s)),
|
||||
Some(_) => return Err(AnyError::from(MismatchedLaunchModeError())),
|
||||
None => {
|
||||
$sb.setup().await?;
|
||||
$sb.listen_on_default_socket().await?
|
||||
let r = $sb.listen_on_default_socket().await;
|
||||
($sb, r)
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
let server = if params.use_local_download {
|
||||
let (sb, server) = if params.use_local_download {
|
||||
let sb = ServerBuilder::new(
|
||||
&install_log,
|
||||
&resolved,
|
||||
@@ -784,6 +785,24 @@ async fn handle_serve(
|
||||
do_setup!(sb)
|
||||
};
|
||||
|
||||
let server = match server {
|
||||
Ok(s) => s,
|
||||
Err(e) => {
|
||||
// we don't loop to avoid doing so infinitely: allow the client to reconnect in this case.
|
||||
if let AnyError::CodeError(CodeError::ServerUnexpectedExit(ref e)) = e {
|
||||
warning!(
|
||||
c.log,
|
||||
"({}), removing server due to possible corruptions",
|
||||
e
|
||||
);
|
||||
if let Err(e) = sb.evict().await {
|
||||
warning!(c.log, "Failed to evict server: {}", e);
|
||||
}
|
||||
}
|
||||
return Err(e);
|
||||
}
|
||||
};
|
||||
|
||||
server_ref.replace(server.clone());
|
||||
server
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user