Skip to content

Commit 9574599

Browse files
RealOrkorealorkoJohannesGaessler
authored
fix: free ctx_copy in ggml_opt_free to plug per-training-session leak (ggml-org#21592)
* fix: free ctx_copy in ggml_opt_free to plug per-training-session leak ggml_opt_alloc populates opt_ctx->ctx_copy via a free+init pair every time the allocated graph shape changes. The last ctx_copy from the final ggml_opt_alloc call survives until ggml_opt_free is invoked, but ggml_opt_free was only freeing ctx_static and ctx_cpu, never ctx_copy. Each opt_ctx lifetime therefore leaks the final per-batch context — ~900 KB for a typical GNN training session in sindarin-pkg-tensor, surfaced via AddressSanitizer. ctx_copy is nullptr-initialized and ggml_free() handles NULL safely, so the new release is guard-free. * Update ggml/src/ggml-opt.cpp Co-authored-by: Johannes Gäßler <johannesg@5d6.de> --------- Co-authored-by: realorko <realorko@nowhere.com> Co-authored-by: Johannes Gäßler <johannesg@5d6.de>
1 parent e67d91a commit 9574599

1 file changed

Lines changed: 1 addition & 0 deletions

File tree

ggml/src/ggml-opt.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -589,6 +589,7 @@ void ggml_opt_free(ggml_opt_context_t opt_ctx) {
589589
ggml_backend_buffer_free(opt_ctx->buf_cpu);
590590
ggml_free(opt_ctx->ctx_static);
591591
ggml_free(opt_ctx->ctx_cpu);
592+
ggml_free(opt_ctx->ctx_copy);
592593
delete opt_ctx;
593594
}
594595

0 commit comments

Comments
 (0)