#1570·colibri

Vulkan is never torn down: no engine calls coli_vk_shutdown (Metal is, in kimi_k3)

Author: clarkseCreated Sep 16, 2026Updated Sep 17, 2026

coli_vk_shutdown() is declared (c/backend_vulkan.h:20) and defined (c/backend_vulkan.c:1536), but the only call site in the tree is inside the #ifdef VK_TEST self-test main() (c/backend_vulkan.c:2163). No engine calls it:

engine coli_vk_shutdown coli_metal_shutdown
colibri.c 0 0
glm53.c 0 0
kimi_k3.c 0 3
qwen36.c 0 0
inkling.c 0 0

So Metal is torn down, in kimi_k3.c (:3214, :3269, :3342), while Vulkan never is anywhere.

For a CLI that exits this is harmless — the process teardown reclaims the device, the arena blocks and the mapped memory. It seemed worth asking about because mat_release's own comment raises exactly the case where it would matter:

Una CLI che finisce lascia fare al sistema operativo; un ospite che tiene piu' motori nello stesso processo no, e un motore che non si smonta diventa una perdita per richiesta.

Nothing in-tree hosts several engines in one process today, so this may well be deliberate — hence a question rather than a patch.

Is the asymmetry intentional? If engines should tear Vulkan down, it looks like a cross-cutting change (every engine with a Vulkan path, not one), and I'd be happy to send it as a separate PR if you'd like it done.

Observed on main @ a8f2ca6, v1.11.0.

Drafted with Claude Code