git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 09/15] http: release the memory of a http pack request as well

From
Stefan Beller <sbeller@google.com>
Date
Mar 24, 2015, 16:54 UTC
Message-ID
<CAGZ79kZbe9d7wG+CJ0o93hDs3sFjkSp68pBHXpjOysbzgvjo3w@mail.gmail.com>
In-Reply-To
<xmqq1tkgddto.fsf@gitster.dls.corp.google.com>
On Sun, Mar 22, 2015 at 12:36 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 29 quoted lines
> Stefan Beller <sbeller@google.com> writes:
>
>> The cleanup function is used in 4 places now and it's always safe to
>> free up the memory as well.
>>
>> Signed-off-by: Stefan Beller <sbeller@google.com>
>> ---
>>  http.c | 1 +
>>  1 file changed, 1 insertion(+)
>>
>> diff --git a/http.c b/http.c
>> index 9c825af..4b179f6 100644
>> --- a/http.c
>> +++ b/http.c
>> @@ -1462,6 +1462,7 @@ void release_http_pack_request(struct http_pack_request *preq)
>>       }
>>       preq->slot = NULL;
>>       free(preq->url);
>> +     free(preq);
>>  }
>>
>>  int finish_http_pack_request(struct http_pack_request *preq)
>
> Freeing of preq in all the callers of this one looks sensible,
> except for the one in finish_request() of http-push.c that pulls an
> preq instance out of request->userData.
>
> Can somebody help me follow the dataflow to convince me that this is
> not leading to double-free in start_fetch_packed()?
I am not sure where you suspect the double free problem.

In start_fetch_packed we have a call to release_http_pack_request 2 times but just in an error-out-and-cleanup case, so either of one cases is called.

In the latter place (http-push.c lines 335-347), we have code like
    request->userData = preq;
    if (!start_active_slot(preq->slot)) {
        release_http_pack_request(preq);
        repo->can_update_info_refs = 0;
        release_request(request);
    }

Do you mean that the release_http_pack_request and release_request may collide as the `release_request(request);` has a pointer to preq via its userData field?

Well there is hope, as `release_request` only touches
    free(request->url);
    free(request);
and not the userData pointer.
I am a bit puzzled what you're trying to hint at.
>
> Thanks.
>
Previous: Junio C HamanoNext: Junio C Hamano
Message 31 of 44 in “Fixing memory leaks”
  1. 00/15 Fixing memory leaksStefan Beller, Mar 21, 2015
  2. 01/15 read-cache: fix memleakStefan Beller, Mar 21, 2015
  3. Junio C HamanoMar 21, 2015
  4. Stefan BellerMar 23, 2015
  5. 1/2 read-cache: fix memleakStefan Beller, Mar 23, 2015
  6. 2/2 read-cache.c: fix a memleak in add_to_indexStefan Beller, Mar 23, 2015
  7. Junio C HamanoMar 23, 2015
  8. Junio C HamanoMar 23, 2015
  9. 02/15 read-cache: Improve readabilityStefan Beller, Mar 21, 2015
  10. Junio C HamanoMar 21, 2015
  11. Stefan BellerMar 21, 2015
  12. Junio C HamanoMar 22, 2015
  13. 03/15 read-cache: free cache entry in add_to_index in case of early returnStefan Beller, Mar 21, 2015
  14. Junio C HamanoMar 21, 2015
  15. Stefan BellerMar 21, 2015
  16. Junio C HamanoMar 22, 2015
  17. 04/15 update-index: fix a memleakStefan Beller, Mar 21, 2015
  18. Junio C HamanoMar 21, 2015
  19. update-index: Don't copy memory aroundStefan Beller, Mar 23, 2015
  20. Junio C HamanoMar 23, 2015
  21. 05/15 builtin/apply.c: fix a memleakStefan Beller, Mar 21, 2015
  22. Junio C HamanoMar 21, 2015
  23. builtin/apply.c: fix a memleak (Fixup, squashable)Stefan Beller, Mar 23, 2015
  24. Junio C HamanoMar 23, 2015
  25. 06/15 merge-blobs.c: Fix a memleakStefan Beller, Mar 21, 2015
  26. 07/15 merge-recursive: fix memleaksStefan Beller, Mar 21, 2015
  27. Junio C HamanoMar 21, 2015
  28. 08/15 http-push: Remove unneeded cleanupStefan Beller, Mar 21, 2015
  29. 09/15 http: release the memory of a http pack request as wellStefan Beller, Mar 21, 2015
  30. Junio C HamanoMar 22, 2015
  31. Stefan BellerMar 24, 2015
  32. Junio C HamanoMar 24, 2015
  33. 10/15 commit.c: fix a memory leakStefan Beller, Mar 21, 2015
  34. Junio C HamanoMar 21, 2015
  35. Duy NguyenMar 24, 2015
  36. Re* [PATCH 10/15] commit.c: fix a memory leakJunio C Hamano, Mar 24, 2015
  37. Stefan BellerMar 24, 2015
  38. 11/15 builtin/check-attr: fix a memleakStefan Beller, Mar 21, 2015
  39. Junio C HamanoMar 21, 2015
  40. 12/15 builtin/merge-base: fix memleakStefan Beller, Mar 21, 2015
  41. 13/15 builtin/unpack-file: fix a memleakStefan Beller, Mar 21, 2015
  42. 14/15 builtin/cat-file: free memleakStefan Beller, Mar 21, 2015
  43. 15/15 ls-files: fix a memleakStefan Beller, Mar 21, 2015
  44. Junio C HamanoMar 21, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.