On commit b1108 (
44c117f4) xaedes added
ggml_allocr * alloc = NULL;
... (many lines in between)
if (alloc) {
ggml_allocr_free(alloc);
}
Which is correct, but it's easy to lose context after many lines in between.
On commit b1287 (
0e76a899) xaedes made a big change. From here on, alloc is freed eagerly.
alloc = ggml_allocr_new(...)
... (short lines of code)
ggml_allocr_free(alloc)
This happens a few times, but alloc is never set to NULL, and many lines below,
we still have
if (alloc) {
ggml_allocr_free(alloc);
}
which causes a double-free.
opt_cb_data.last_save_iter = opt->iter;
}
- if (alloc) {
- ggml_allocr_free(alloc);
- }
-
ggml_free(opt->ctx);
free_train_state(train);
ggml_free(model.ctx);