Skip to content

Memory leak fixes (pt.7)

Patrick Steinhardt git 2 versions – New

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v2 Latest23 patches 0 repliesNew
  2. v123 patches 14 repliesSuperseded

Patches in v2 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/23builtin/help: fix dangling reference to `html_path`builtin/help.c+7 -60 replies
2/23builtin/help: fix leaking `html_path` when reading config multiple timesbuiltin/help.c+2 -10 replies
3/23git: fix leaking argv when handling builtinsgit.c t/t0012-help.sh+20 -30 replies
4/23submodule: fix leaking update strategybuiltin/submodule--helper.c submodule-config.c submodule.c +2 more+12 -30 replies
5/23builtin/submodule--helper: clear child process when not running itbuiltin/submodule--helper.c t/t7407-submodule-foreach.sh+8 -30 replies
6/23builtin/submodule--helper: fix leaking error bufferbuiltin/submodule--helper.c t/t7408-submodule-reference.sh+4 -00 replies
7/23t/helper: fix leaking subrepo in nested submodule config helpert/helper/test-submodule-nested-repo-config.c t/t7411-submodule-config.sh+2 -10 replies
8/23builtin/submodule--helper: fix leaking remote ref on errorsbuiltin/submodule--helper.c t/t7420-submodule-set-url.sh+10 -40 replies
9/23dir: fix off by one errors for ignored and untracked entriesdir.c t/t3011-common-prefixes-and-directory-traversal.sh t/t7061-wtstatus-ignore.sh +1 more+5 -40 replies
10/23builtin/pull: fix leaking "ff" optionbuiltin/pull.c t/t7601-merge-pull-config.sh+8 -40 replies
11/23diff: fix leaking orderfile optioncombine-diff.c diff.c diff.h+7 -50 replies
12/23parse-options: free previous value of `OPTION_FILENAME`parse-options.c+14 -80 replies
13/23diffcore-order: fix leaking buffer when parsing orderfilesdiffcore-order.c t/t4056-diff-order.sh t/t4204-patch-id.sh+9 -120 replies
14/23builtin/repack: fix leaking configurationbuiltin/repack.c t/t5329-pack-objects-cruft.sh t/t7700-repack.sh+45 -150 replies
15/23builtin/difftool: plug several trivial memory leaksbuiltin/difftool.c t/t7800-difftool.sh+7 -00 replies
16/23trace2: destroy context stored in thread-local storagetrace2/tr2_tls.c+9 -10 replies
17/23submodule: fix leaking submodule ODB pathssubmodule.c+2 -20 replies
18/23grep: fix leaking grep patterngrep.c+1 -10 replies
19/23promisor-remote: fix leaking partial clone filterpromisor-remote.c t/t7814-grep-recurse-submodules.sh+3 -00 replies
20/23builtin/maintenance: fix leaking config stringbuiltin/gc.c+2 -20 replies
21/23builtin/maintenance: fix leak in `get_schedule_cmd()`builtin/gc.c t/t7900-maintenance.sh+81 -470 replies
22/23revision: fix leaking parents when simplifying commitsrevision.c t/t1414-reflog-walk.sh t/t5310-pack-bitmaps.sh +4 more+12 -00 replies
23/23diffcore-break: fix leaking filespecs when merging broken pairsdiffcore-break.c t/t4008-diff-break-rewrite.sh t/t4022-diff-rewrite.sh +3 more+9 -20 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v2 yet.

Read the v2 thread

Cover letter [PATCH v2 00/23] Memory leak fixes (pt.7)

Hi,

this is the second version of another round of memory leak fixes. There's only a single change compared to v1, namely a revised commit message.

Thanks!

Patrick

Patrick Steinhardt (23):
builtin/help: fix dangling reference to html_path builtin/help: fix leaking html_path when reading config multiple
times
git: fix leaking argv when handling builtins
submodule: fix leaking update strategy builtin/submodule--helper: clear child process when not running it builtin/submodule--helper: fix leaking error buffer t/helper: fix leaking subrepo in nested submodule config helper builtin/submodule--helper: fix leaking remote ref on errors
dir: fix off by one errors for ignored and untracked entries builtin/pull: fix leaking "ff" option
diff: fix leaking orderfile option
parse-options: free previous value of OPTION_FILENAME
diffcore-order: fix leaking buffer when parsing orderfiles builtin/repack: fix leaking configuration builtin/difftool: plug several trivial memory leaks
trace2: destroy context stored in thread-local storage
submodule: fix leaking submodule ODB paths
grep: fix leaking grep pattern
promisor-remote: fix leaking partial clone filter builtin/maintenance: fix leaking config string builtin/maintenance: fix leak in get_schedule_cmd()
revision: fix leaking parents when simplifying commits
diffcore-break: fix leaking filespecs when merging broken pairs

 builtin/difftool.c                            |   6 +
 builtin/gc.c                                  | 131 +++++++++++-------
 builtin/help.c                                |  16 ++-
 builtin/pull.c                                |  11 +-
 builtin/repack.c                              |  57 ++++++--
 builtin/submodule--helper.c                   |  26 +++-
 combine-diff.c                                |   3 +-
 diff.c                                        |   7 +-
 diff.h                                        |   2 +-
 diffcore-break.c                              |   4 +-
 diffcore-order.c                              |  19 +--
 dir.c                                         |   6 +-
 git.c                                         |  22 ++-
 grep.c                                        |   2 +-
 parse-options.c                               |  22 +--
 promisor-remote.c                             |   2 +
 revision.c                                    |   5 +
 submodule-config.c                            |   2 +-
 submodule.c                                   |   9 +-
 submodule.h                                   |   6 +-
 t/helper/test-submodule-nested-repo-config.c  |   2 +-
 t/t0012-help.sh                               |   1 +
 t/t1414-reflog-walk.sh                        |   1 +
 ...common-prefixes-and-directory-traversal.sh |   1 +
 t/t4008-diff-break-rewrite.sh                 |   2 +
 t/t4022-diff-rewrite.sh                       |   1 +
 t/t4023-diff-rename-typechange.sh             |   1 +
 t/t4031-diff-rewrite-binary.sh                |   1 +
 t/t4056-diff-order.sh                         |   1 +
 t/t4204-patch-id.sh                           |   1 +
 t/t5310-pack-bitmaps.sh                       |   1 +
 t/t5326-multi-pack-bitmaps.sh                 |   2 +
 t/t5329-pack-objects-cruft.sh                 |   2 +
 t/t6004-rev-list-path-optim.sh                |   1 +
 t/t6019-rev-list-ancestry-path.sh             |   1 +
 t/t6111-rev-list-treesame.sh                  |   1 +
 t/t7061-wtstatus-ignore.sh                    |   1 +
 t/t7406-submodule-update.sh                   |   1 +
 t/t7407-submodule-foreach.sh                  |   1 +
 t/t7408-submodule-reference.sh                |   2 +
 t/t7411-submodule-config.sh                   |   1 +
 t/t7420-submodule-set-url.sh                  |   1 +
 t/t7521-ignored-mode.sh                       |   1 +
 t/t7524-commit-summary.sh                     |   2 +
 t/t7601-merge-pull-config.sh                  |   1 +
 t/t7700-repack.sh                             |   1 +
 t/t7800-difftool.sh                           |   1 +
 t/t7814-grep-recurse-submodules.sh            |   1 +
 t/t7900-maintenance.sh                        |   1 +
 trace2/tr2_tls.c                              |  10 +-
 50 files changed, 279 insertions(+), 124 deletions(-)

Range-diff against v1:

 1:  e3bed973af =  1:  e3bed973af builtin/help: fix dangling reference to `html_path`
 2:  4a59fe15ae =  2:  4a59fe15ae builtin/help: fix leaking `html_path` when reading config multiple times
 3:  ea3dd851ad =  3:  ea3dd851ad git: fix leaking argv when handling builtins
 4:  7cdd2691b7 =  4:  7cdd2691b7 submodule: fix leaking update strategy
 5:  0d0964a2be =  5:  0d0964a2be builtin/submodule--helper: clear child process when not running it
 6:  52d12e034b =  6:  52d12e034b builtin/submodule--helper: fix leaking error buffer
 7:  96bd7f01d5 =  7:  96bd7f01d5 t/helper: fix leaking subrepo in nested submodule config helper
 8:  d088703d31 !  8:  d5e7a24aac builtin/submodule--helper: fix leaking remote ref on errors

@@ Metadata
## Commit message ##
builtin/submodule--helper: fix leaking remote ref on errors

- When update_submodule() fails we return with die_message().
- Curiously enough, this causes a memory leak because we use the
- run_process_parallel() interfaces here, which swap out the die
- routine.
+ When update_submodule() fails we return with die_message(), which
+ only causes us to print the same message as die() would without
+ actually causing the process to die. We don't free memory in that case
+ and thus leak memory.

Fix the leak by freeing the remote ref.

 9:  d5c9cccb82 =  9:  fca161d389 dir: fix off by one errors for ignored and untracked entries
10:  747c9a76a2 = 10:  2338b5e2a8 builtin/pull: fix leaking "ff" option
11:  85c0f9e5f5 = 11:  cb08db4d37 diff: fix leaking orderfile option
12:  330b6c52a0 = 12:  650b89bcca parse-options: free previous value of `OPTION_FILENAME`
13:  c975dfe462 = 13:  cd79422087 diffcore-order: fix leaking buffer when parsing orderfiles
14:  a5f3931eee = 14:  e015d1704b builtin/repack: fix leaking configuration
15:  c79a5118e4 = 15:  7bb07ec2f0 builtin/difftool: plug several trivial memory leaks
16:  0fb3dc55e5 = 16:  30928eb8f9 trace2: destroy context stored in thread-local storage
17:  f1cb8122d1 = 17:  35f5de5467 submodule: fix leaking submodule ODB paths
18:  411df7248d = 18:  3d1cece660 grep: fix leaking grep pattern
19:  690de28bef = 19:  da7768bad5 promisor-remote: fix leaking partial clone filter
20:  ed4091255c = 20:  0a72fc83f7 builtin/maintenance: fix leaking config string
21:  46956bd8fb = 21:  95200b8a76 builtin/maintenance: fix leak in `get_schedule_cmd()`
22:  2a23df9a68 = 22:  8e7ea54863 revision: fix leaking parents when simplifying commits
23:  57a3a9e9f8 = 23:  8cbc41425f diffcore-break: fix leaking filespecs when merging broken pairs
Signature · 1 line
2.46.2.852.g229c0bf0e5.dirty