Odin Rqt-close Apr 2026
In Odin, every open deserves a close, every create a destroy. Your future self (and your operating system) will thank you.
Odin’s lack of automatic cleanup is a feature, not a bug. It forces you to think about resource lifetimes at every step, leading to more predictable and often more efficient software. The rqt-close pattern—whether you name it that or simply call CloseHandle directly—is the cornerstone of robust system programming in Odin.
when ODIN_OS == "windows" close_fn :: proc(h: rawptr) windows.CloseHandle(transmute(windows.HANDLE)h) else when ODIN_OS == "linux" || ODIN_OS == "darwin" close_fn :: proc(fd: rawptr) sys.linux.close(transmute(int)fd) odin rqt-close
If you have dependent resources (e.g., a file mapping before the file handle), close child resources first. 3. Defer is Your Friend Odin’s defer statement is perfect for pairing allocation with release:
import "core:runtime" cleanup_my_resource :: proc(data: rawptr) handle := cast(^windows.HANDLE)data CloseHandle(handle^) In Odin, every open deserves a close, every create a destroy
A typical Odin solution uses conditional compilation:
| Platform | Resource Type | Close Function | |----------|---------------|----------------| | Windows | HANDLE | CloseHandle | | Linux / macOS | file descriptor | close (syscall or libc) | | WebAssembly (WASI) | fd | fd_close | It forces you to think about resource lifetimes
if my_handle != INVALID_HANDLE CloseHandle(my_handle) my_handle = INVALID_HANDLE
