On Thu, May 3, 2018 at 7:24 PM, Stefan Beller <sbeller@xxxxxxxxxx> wrote: >>> +void clear_alloc_state(struct alloc_state *s) >>> +{ >>> + while (s->slab_nr > 0) { >>> + s->slab_nr--; >>> + free(s->slabs[s->slab_nr]); >> >> I think you're leaking memory here. Commit and tree objects may have >> more allocations in them (especially trees, but I think we have >> commit_list in struct commit too). Those need to be freed as well. > > I would think that tree and commit memory will be free'd in the > parsed_objects release function? (TODO: I need to add it over there) What release function? I know tree->buffer is often released since you don't want to keep much in memory. But the user should not be required to release all objects before calling object_parser_clear(). For struct commit, I'm pretty we make the commit_list (for commit parents) and never free. Now we need to do it, somewhere. Oh you mean object_parser_clear() as release function? Yes. I've been wondering if it makes more sense to go through obj_hash[] and release objects before free(obj_hash) than doing it here. It's probably better to do it there since obj_hash[] would contain the very last pointers to these objects and look like the right place to release resources. > Thanks, > Stefan -- Duy