I’m going to go one step further and suggest something different here because while I get what you’re saying, this still has the problem from before:
Imagine we have an error
like so…
alloc1
|
{ OOM, X, Y Z }
|
alloc2
You now have two allocators using the same error. So which one failed? If you have a long enough call stack, this can become impractical to solve.
So I’m going to make a suggestion here…
// somewhere up above...
const task = try allocator.create(T);
errdefer allocator.destroy(task);
task.* = .{
.mesh = mesh,
};
// then later...
pub fn schedule(task: *Task) !void {
try main.threadPool.addTask(task, &vtable); // Uses another allocator internally
}
I’ll meet you halfway - I think mixing allocators for the same function (if they both can fail) is not optimal, but I get your point about not using a global allocator for the current use case.