mirror of
https://github.com/containerd/containerd.git
synced 2026-11-06 05:17:02 +00:00
loadShim runs during runtime plugin initialization and issued its task RPCs on the caller's context, which carries no deadline. A shim that still owns its socket but has stopped serving, for example one leaked by a previous containerd whose shutdown timed out, accepts the connection and then never answers. containerd then never finishes starting and its API socket is never created. Give loadShim a single loadTimeout budget covering the whole load. Nested timeouts can only shorten a deadline, so the load stays bounded however many calls it makes. Reaping a shim we give up on runs on its own cleanup budget, detached from the caller so that a cancelled load cannot leave the shim behind. A failed delete returns before shutting the shim down and closing its client, so both are done here, and the failure is now propagated: delete removes the bundle only when it succeeds, and returning an error lets loadShims remove it, so a shim that cannot be reaped is no longer reloaded on every subsequent start. Co-authored-by: Harshal Patel <106813066+HarshalPatel1972@users.noreply.github.com> Signed-off-by: Austin Vazquez <austin.vazquez@docker.com>