On Tue, Sep 24, 2024 at 06:02:13PM -0400, Jeff King wrote: > In new_http_object_request(), we initialize the zlib stream with > git_inflate_init(). We must have a matching git_inflate_end() to avoid > leaking any memory allocated by zlib. > > In most cases this happens in finish_http_object_request(), but we don't > always get there. If we abort a request mid-stream, then we may clean it > up without hitting that function. > > We can't just add a git_inflate_end() call to the release function, > though. That would double-free the cases that did actually finish. > Instead, we'll move the call from the finish function to the release > function. This does delay it for the cases that do finish, but I don't > think it matters. We should have already reached Z_STREAM_END (and > complain if we didn't), and we do not record any status code from > git_inflate_end(). I had to read this paragraph multiple times to understand it, as I wondered why you did end up adding it to `release_http_object_request()` even though the paragraph claims that you cannot. But what you say is that you must _move_ the call, not add it, and that's what the patch does. So yeah, that does make sense. Patrick