Skip to content

Commit a976e50

Browse files
committed
While start the shim fail, ensure the socket file has been remove
Discovered socket file leak when set_cgroup_ond_oom_store execution failed Signed-off-by: jokemanfire <[email protected]>
1 parent 9d9cc05 commit a976e50

File tree

5 files changed

+20
-11
lines changed

5 files changed

+20
-11
lines changed

crates/shim-protos/examples/ttrpc-server-async.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ impl Task for FakeServer {
6060
async fn main() {
6161
simple_logger::SimpleLogger::new().init().unwrap();
6262

63-
let tservice = create_task(Arc::new(Box::new(FakeServer::new())));
63+
let tservice = create_task(Arc::new(FakeServer::new()));
6464

6565
let mut server = Server::new()
6666
.bind("unix:///tmp/shim-proto-ttrpc-001")

crates/shim-protos/examples/ttrpc-server.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,7 @@ impl Task for FakeServer {
5656

5757
fn main() {
5858
simple_logger::SimpleLogger::new().init().unwrap();
59-
60-
let tservice = create_task(Arc::new(Box::new(FakeServer::new())));
59+
let tservice = create_task(Arc::new(FakeServer::new()));
6160

6261
let mut server = Server::new()
6362
.bind("unix:///tmp/shim-proto-ttrpc-001")

crates/shim-protos/tests/ttrpc.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ fn create_ttrpc_context() -> (
7272

7373
#[test]
7474
fn test_task_method_num() {
75-
let task = create_task(Arc::new(Box::new(FakeServer::new())));
75+
let task = create_task(Arc::new(FakeServer::new()));
7676
assert_eq!(task.len(), 17);
7777
}
7878

@@ -96,7 +96,7 @@ fn test_create_task() {
9696
request.set_timeout_nano(10000);
9797
request.set_metadata(ttrpc::context::to_pb(ctx.metadata.clone()));
9898

99-
let task = create_task(Arc::new(Box::new(FakeServer::new())));
99+
let task = create_task(Arc::new(FakeServer::new()));
100100
let create = task.get("/containerd.task.v2.Task/Create").unwrap();
101101
create.handler(ctx, request).unwrap();
102102

@@ -137,7 +137,7 @@ fn test_delete_task() {
137137
request.set_timeout_nano(10000);
138138
request.set_metadata(ttrpc::context::to_pb(ctx.metadata.clone()));
139139

140-
let task = create_task(Arc::new(Box::new(FakeServer::new())));
140+
let task = create_task(Arc::new(FakeServer::new()));
141141
let delete = task.get("/containerd.task.v2.Task/Delete").unwrap();
142142
delete.handler(ctx, request).unwrap();
143143

crates/shim/src/asynchronous/mod.rs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -344,11 +344,21 @@ pub async fn spawn(opts: StartOpts, grouping: &str, vars: Vec<(&str, &str)>) ->
344344
command.arg("-debug");
345345
}
346346
command.envs(vars);
347-
348-
let _child = command.spawn().map_err(io_error!(e, "spawn shim"))?;
347+
// if fail we should remove socket
348+
let result = command.spawn().map_err(io_error!(e, "spawn shim"));
349+
if result.is_err() {
350+
remove_socket(&address).await?;
351+
}
352+
let _child = result?;
353+
// if fail we should remove socket
349354
#[cfg(target_os = "linux")]
350-
crate::cgroup::set_cgroup_and_oom_score(_child.id())?;
351-
Ok(address)
355+
match crate::cgroup::set_cgroup_and_oom_score(_child.id()) {
356+
Ok(_) => Ok(address),
357+
Err(error) => {
358+
remove_socket(&address).await?;
359+
Err(error)
360+
}
361+
}
352362
}
353363

354364
#[cfg_attr(feature = "tracing", tracing::instrument(skip_all, level = "info"))]

crates/shim/src/asynchronous/publisher.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ mod tests {
218218
let barrier2 = barrier.clone();
219219
let server_thread = tokio::spawn(async move {
220220
let listener = UnixListener::bind(&path1).unwrap();
221-
let service = create_events(Arc::new(Box::new(server)));
221+
let service = create_events(Arc::new(server));
222222
let mut server = Server::new()
223223
.set_domain_unix()
224224
.add_listener(listener.as_raw_fd())

0 commit comments

Comments
 (0)