Skip to content

Commit 5692ff2

Browse files
committed
send response when connected fail
1 parent 1af5a5d commit 5692ff2

File tree

3 files changed

+45
-18
lines changed

3 files changed

+45
-18
lines changed

src/context/mod.rs

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,20 @@ impl EmmyLuaDebugContext {
7070
if let Some(response) = response {
7171
match output.lock().unwrap().respond(response) {
7272
Err(server_err) => {
73-
log::error!("{:?}", server_err);
74-
// exit
75-
std::process::exit(1);
73+
log::error!(
74+
"Failed to send response for request {}: {:?}",
75+
req_id,
76+
server_err
77+
);
78+
// Don't exit - DAP clients expect responses even on errors
79+
// The error will be logged and the client should handle the situation
80+
}
81+
Ok(_) => {
82+
log::debug!("Successfully sent response for request {}", req_id);
7683
}
77-
Ok(_) => {}
7884
}
85+
} else {
86+
log::warn!("No response generated for request {}", req_id);
7987
}
8088

8189
let mut cancellations = cancellations.lock().await;
@@ -94,7 +102,11 @@ impl EmmyLuaDebugContext {
94102
let mut output = self.ide_conn.lock().unwrap();
95103
let result = output.respond(response);
96104
if let Err(server_err) = result {
97-
log::error!("{:?}", server_err)
105+
log::error!("Failed to send response: {:?}", server_err);
106+
// Don't panic - log the error and continue
107+
// The client should handle missing responses gracefully
108+
} else {
109+
log::debug!("Successfully sent response");
98110
}
99111
}
100112
}

src/handler/debugger_connected.rs

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,17 @@ pub async fn after_debugger_connected(
1414
{
1515
log::info!("on debugger connected");
1616
let mut ide_conn = dap.ide_conn.lock().unwrap();
17-
ide_conn
18-
.send_event(Event::Output(OutputEventBody {
19-
category: Some(dap::types::OutputEventCategory::Console),
20-
output: "Debugger connected\n".to_string(),
21-
..Default::default()
22-
}))
23-
.map_err(|err| RequestHandlerError::ServerError(err))?;
17+
match ide_conn.send_event(Event::Output(OutputEventBody {
18+
category: Some(dap::types::OutputEventCategory::Console),
19+
output: "Debugger connected\n".to_string(),
20+
..Default::default()
21+
})) {
22+
Ok(_) => {}
23+
Err(err) => {
24+
log::error!("Failed to send output event: {:?}", err);
25+
// Continue anyway - this is not critical
26+
}
27+
}
2428
}
2529

2630
{
@@ -57,9 +61,15 @@ pub async fn after_debugger_connected(
5761
{
5862
log::info!("send initialized event to ide");
5963
let mut ide_conn = dap.ide_conn.lock().unwrap();
60-
ide_conn
61-
.send_event(Event::Initialized)
62-
.map_err(|err| RequestHandlerError::ServerError(err))?;
64+
match ide_conn.send_event(Event::Initialized) {
65+
Ok(_) => {
66+
log::info!("Successfully sent initialized event");
67+
}
68+
Err(err) => {
69+
log::error!("Failed to send initialized event: {:?}", err);
70+
return Err(RequestHandlerError::ServerError(err).into());
71+
}
72+
}
6373
}
6474
Ok(())
6575
}

src/handler/launch_request.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,18 +61,23 @@ pub async fn on_launch_request(
6161
data.sources = emmy_new_debug_argument.source_paths.clone();
6262

6363
let dap = dap.clone();
64+
let ide_conn = dap.ide_conn.clone();
6465
tokio::spawn(async move {
6566
tokio::time::sleep(std::time::Duration::from_millis(200)).await;
6667
log::info!("Registering debugger notification");
6768
register_debugger_notification(dap.clone()).await;
6869

6970
log::info!("after debugger connected");
7071
match after_debugger_connected(dap, emmy_new_debug_argument.ext).await {
71-
Ok(_) => {}
72+
Ok(_) => {
73+
log::info!("Debugger connection fully established");
74+
}
7275
Err(err) => {
7376
log::error!("Failed to handle debugger connected: {}", err);
74-
// exit
75-
std::process::exit(1);
77+
// Send a terminated event to notify the client
78+
let mut output = ide_conn.lock().unwrap();
79+
let _ = output.send_event(dap::events::Event::Terminated(None));
80+
// Don't exit - let the client decide what to do
7681
}
7782
}
7883
});

0 commit comments

Comments
 (0)