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

[PATCH 00/22] Memory leak fixes (pt.6)

From
Patrick Steinhardt <ps@pks.im>
Date
Aug 26, 2024, 07:21 UTC
Message-ID
<cover.1724656120.git.ps@pks.im>
Hi,

here's another round of memory leak fixes. This is the second-last round of "general" leak fixes -- so once this and the next series are merged, I have made a full pass over all failing test suites. There will still be a bunch of memory leaks, namely ~86 failing test suites.

I have documented a bunch of remaining leaks at [1]. Most of them are a bit more involved to fix, so they will likely require separate series. These issues relate to:

  - Simplifying commit history causes us to rewrite their parents, but
    we don't free the old parents in some cases. Hit e.g. by t6012.
  - The describe atom infrastructure as used by git-for-each-ref(1) is
    leaky. Hit e.g. by t6300, t6302.
  - Breaking rewrites causes memory leaks. Hit e.g. by t7524.
  - Cloning repositories causes us to re-initialize `the_repository`.
    This surfaces lifetime management issues with the `struct remote`
    that we use, which reuses storage held by `the_repository`. Hit e.g.
    by t5558.
  - The GPG interface is leaky. Hit e.g. by t7510, t7528.

If you want to do some puzzling, please feel free to pick up any of these leaks :) I won't start working on them before I have the final part of memory leak fixes merged.

This patch series builds on top of 6a09c36371 (The eighth batch, 2024-08-23) with Junio's ps/leakfixes-part-5 at 13b23d2da5 (transport: fix leaking negotiation tips, 2024-08-22) merged into it.

Patrick
[1]: https://gitlab.com/groups/gitlab-org/-/epics/14943
Patrick Steinhardt (22):
  t/test-lib: allow skipping leak checks for passing tests
  fetch-pack: fix memory leaks on fetch negotiation
  send-pack: fix leaking common object IDs
  builtin/push: fix leaking refspec query result
  upload-pack: fix leaking child process data on reachability checks
  submodule: fix leaking fetch task data
  builtin/submodule--helper: fix leaking refs on push-check
  remote: fix leaking tracking refs
  remote: fix leak in reachability check of a remote-tracking ref
  send-pack: fix leaking push cert nonce
  gpg-interface: fix misdesigned signing key interfaces
  object: clear grafts when clearing parsed object pool
  shallow: free grafts when unregistering them
  shallow: fix leaking members of `struct shallow_info`
  negotiator/skipping: fix leaking commit entries
  builtin/repack: fix leaking line buffer when packing promisors
  builtin/pack-objects: plug leaking list of keep-packs
  builtin/grep: fix leaking object context
  builtin/fmt-merge-msg: fix leaking buffers
  match-trees: fix leaking prefixes in `shift_tree()`
  merge-ort: fix two leaks when handling directory rename modifications
  builtin/repack: fix leaking keep-pack list
 builtin/fmt-merge-msg.c              |  2 ++
 builtin/grep.c                       |  1 +
 builtin/pack-objects.c               |  1 +
 builtin/push.c                       |  8 +++--
 builtin/repack.c                     |  3 ++
 builtin/submodule--helper.c          |  2 ++
 builtin/tag.c                        |  3 +-
 commit.c                             | 23 ++++--------
 commit.h                             |  3 +-
 fetch-pack.c                         |  3 ++
 gpg-interface.c                      | 26 ++++++++------
 gpg-interface.h                      |  4 +--
 match-trees.c                        | 10 ++++--
 merge-ort.c                          |  4 ++-
 negotiator/skipping.c                |  7 ++--
 object.c                             | 14 +++++++-
 object.h                             |  4 ++-
 remote.c                             |  6 +++-
 repository.c                         |  2 +-
 send-pack.c                          | 52 ++++++++++++++++++----------
 shallow.c                            | 15 ++++++--
 submodule.c                          |  2 ++
 t/t5516-fetch-push.sh                |  1 +
 t/t5526-fetch-submodules.sh          |  1 +
 t/t5531-deep-submodule-push.sh       |  1 +
 t/t5533-push-cas.sh                  |  1 +
 t/t5534-push-signed.sh               |  1 +
 t/t5537-fetch-shallow.sh             |  1 +
 t/t5538-push-shallow.sh              |  1 +
 t/t5549-fetch-push-http.sh           |  1 +
 t/t5552-skipping-fetch-negotiator.sh |  2 ++
 t/t5616-partial-clone.sh             |  1 +
 t/t6132-pathspec-exclude.sh          |  1 +
 t/t6135-pathspec-with-attrs.sh       |  2 ++
 t/t6200-fmt-merge-msg.sh             |  1 +
 t/t6409-merge-subtree.sh             |  1 +
 t/t6423-merge-rename-directories.sh  |  1 +
 t/t6500-gc.sh                        |  1 +
 t/t7703-repack-geometric.sh          |  1 +
 t/test-lib.sh                        | 11 +++++-
 upload-pack.c                        | 22 ++++++++----
 41 files changed, 175 insertions(+), 72 deletions(-)
-- 
2.46.0.164.g477ce5ccd6.dirty
Next: Patrick Steinhardt
Message 1 of 70 in “Memory leak fixes (pt.6)”
  1. 00/22 Memory leak fixes (pt.6)Patrick Steinhardt, Aug 26, 2024
  2. 01/22 t/test-lib: allow skipping leak checks for passing testsPatrick Steinhardt, Aug 26, 2024
  3. Junio C HamanoAug 27, 2024
  4. Toon claesAug 29, 2024
  5. Patrick SteinhardtAug 30, 2024
  6. 02/22 fetch-pack: fix memory leaks on fetch negotiationPatrick Steinhardt, Aug 26, 2024
  7. 03/22 send-pack: fix leaking common object IDsPatrick Steinhardt, Aug 26, 2024
  8. 04/22 builtin/push: fix leaking refspec query resultPatrick Steinhardt, Aug 26, 2024
  9. Junio C HamanoAug 30, 2024
  10. Patrick SteinhardtSep 2, 2024
  11. 05/22 upload-pack: fix leaking child process data on reachability checksPatrick Steinhardt, Aug 26, 2024
  12. Junio C HamanoAug 30, 2024
  13. 06/22 submodule: fix leaking fetch task dataPatrick Steinhardt, Aug 26, 2024
  14. 07/22 builtin/submodule--helper: fix leaking refs on push-checkPatrick Steinhardt, Aug 26, 2024
  15. 08/22 remote: fix leaking tracking refsPatrick Steinhardt, Aug 26, 2024
  16. Junio C HamanoSep 4, 2024
  17. 09/22 remote: fix leak in reachability check of a remote-tracking refPatrick Steinhardt, Aug 26, 2024
  18. 10/22 send-pack: fix leaking push cert noncePatrick Steinhardt, Aug 26, 2024
  19. Junio C HamanoSep 4, 2024
  20. 11/22 gpg-interface: fix misdesigned signing key interfacesPatrick Steinhardt, Aug 26, 2024
  21. Junio C HamanoSep 4, 2024
  22. 12/22 object: clear grafts when clearing parsed object poolPatrick Steinhardt, Aug 26, 2024
  23. 13/22 shallow: free grafts when unregistering themPatrick Steinhardt, Aug 26, 2024
  24. 14/22 shallow: fix leaking members of `struct shallow_info`Patrick Steinhardt, Aug 26, 2024
  25. Toon claesAug 29, 2024
  26. Junio C HamanoAug 29, 2024
  27. Patrick SteinhardtAug 30, 2024
  28. 15/22 negotiator/skipping: fix leaking commit entriesPatrick Steinhardt, Aug 26, 2024
  29. Calvin WanAug 28, 2024
  30. Josh SteadmonAug 28, 2024
  31. Patrick SteinhardtAug 29, 2024
  32. Calvin WanAug 29, 2024
  33. 16/22 builtin/repack: fix leaking line buffer when packing promisorsPatrick Steinhardt, Aug 26, 2024
  34. Junio C HamanoSep 4, 2024
  35. 17/22 builtin/pack-objects: plug leaking list of keep-packsPatrick Steinhardt, Aug 26, 2024
  36. 18/22 builtin/grep: fix leaking object contextPatrick Steinhardt, Aug 26, 2024
  37. Junio C HamanoSep 4, 2024
  38. 19/22 builtin/fmt-merge-msg: fix leaking buffersPatrick Steinhardt, Aug 26, 2024
  39. 20/22 match-trees: fix leaking prefixes in `shift_tree()`Patrick Steinhardt, Aug 26, 2024
  40. Junio C HamanoSep 4, 2024
  41. 21/22 merge-ort: fix two leaks when handling directory rename modificationsPatrick Steinhardt, Aug 26, 2024
  42. Junio C HamanoSep 4, 2024
  43. Elijah NewrenSep 5, 2024
  44. 22/22 builtin/repack: fix leaking keep-pack listPatrick Steinhardt, Aug 26, 2024
  45. Junio C HamanoSep 4, 2024
  46. 00/22 Memory leak fixes (pt.6)Patrick Steinhardt, Sep 5, 2024
  47. 01/22 t/test-lib: allow skipping leak checks for passing testsPatrick Steinhardt, Sep 5, 2024
  48. 02/22 fetch-pack: fix memory leaks on fetch negotiationPatrick Steinhardt, Sep 5, 2024
  49. 03/22 send-pack: fix leaking common object IDsPatrick Steinhardt, Sep 5, 2024
  50. 04/22 builtin/push: fix leaking refspec query resultPatrick Steinhardt, Sep 5, 2024
  51. 05/22 upload-pack: fix leaking child process data on reachability checksPatrick Steinhardt, Sep 5, 2024
  52. 06/22 submodule: fix leaking fetch task dataPatrick Steinhardt, Sep 5, 2024
  53. 07/22 builtin/submodule--helper: fix leaking refs on push-checkPatrick Steinhardt, Sep 5, 2024
  54. 08/22 remote: fix leaking tracking refsPatrick Steinhardt, Sep 5, 2024
  55. 09/22 remote: fix leak in reachability check of a remote-tracking refPatrick Steinhardt, Sep 5, 2024
  56. 10/22 send-pack: fix leaking push cert noncePatrick Steinhardt, Sep 5, 2024
  57. 11/22 gpg-interface: fix misdesigned signing key interfacesPatrick Steinhardt, Sep 5, 2024
  58. 12/22 object: clear grafts when clearing parsed object poolPatrick Steinhardt, Sep 5, 2024
  59. 13/22 shallow: free grafts when unregistering themPatrick Steinhardt, Sep 5, 2024
  60. 14/22 shallow: fix leaking members of `struct shallow_info`Patrick Steinhardt, Sep 5, 2024
  61. 15/22 negotiator/skipping: fix leaking commit entriesPatrick Steinhardt, Sep 5, 2024
  62. 16/22 builtin/repack: fix leaking line buffer when packing promisorsPatrick Steinhardt, Sep 5, 2024
  63. 17/22 builtin/pack-objects: plug leaking list of keep-packsPatrick Steinhardt, Sep 5, 2024
  64. 18/22 builtin/grep: fix leaking object contextPatrick Steinhardt, Sep 5, 2024
  65. 19/22 builtin/fmt-merge-msg: fix leaking buffersPatrick Steinhardt, Sep 5, 2024
  66. 20/22 match-trees: fix leaking prefixes in `shift_tree()`Patrick Steinhardt, Sep 5, 2024
  67. 21/22 merge-ort: fix two leaks when handling directory rename modificationsPatrick Steinhardt, Sep 5, 2024
  68. 22/22 builtin/repack: fix leaking keep-pack listPatrick Steinhardt, Sep 5, 2024
  69. Junio C HamanoSep 8, 2024
  70. Junio C HamanoSep 12, 2024

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.