{"thread":{"id":"48140","subject":"[PATCH] unpack-trees: release oid_array after use in check_updates()","startedAt":"2018-03-25T16:32:00Z","lastAt":"2018-03-25T18:33:23Z","messageCount":2,"participants":["René Scharfe","Derrick Stolee"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"342896","messageId":"b2380d1e-1d45-22cf-ba22-cf4cb02e1134@web.de","threadId":"48140","inReplyTo":null,"subject":"[PATCH] unpack-trees: release oid_array after use in check_updates()","fromName":"René Scharfe","fromEmail":"l.s.r@web.de","sentAt":"2018-03-25T16:31:48Z","receivedAt":"2018-03-25T16:32:00Z","isPatch":true,"sender":{"key":"l.s.r@web.de","avatar":"https://avatars.githubusercontent.com/u/26122331?v=4"},"body":"Signed-off-by: Rene Scharfe <l.s.r@web.de>\n---\nThat leak was introduced by c0c578b33c (unpack-trees: batch fetching of\nmissing blobs).\n\n unpack-trees.c | 1 +\n 1 file changed, 1 insertion(+)\n\ndiff --git a/unpack-trees.c b/unpack-trees.c\nindex d5685891a5..e73745051e 100644\n--- a/unpack-trees.c\n+++ b/unpack-trees.c\n@@ -379,30 +379,31 @@ static int check_updates(struct unpack_trees_options *o)\n \t\tstruct oid_array to_fetch = OID_ARRAY_INIT;\n \t\tint fetch_if_missing_store = fetch_if_missing;\n \t\tfetch_if_missing = 0;\n \t\tfor (i = 0; i < index->cache_nr; i++) {\n \t\t\tstruct cache_entry *ce = index->cache[i];\n \t\t\tif ((ce->ce_flags & CE_UPDATE) &&\n \t\t\t    !S_ISGITLINK(ce->ce_mode)) {\n \t\t\t\tif (!has_object_file(&ce->oid))\n \t\t\t\t\toid_array_append(&to_fetch, &ce->oid);\n \t\t\t}\n \t\t}\n \t\tif (to_fetch.nr)\n \t\t\tfetch_objects(repository_format_partial_clone,\n \t\t\t\t      &to_fetch);\n \t\tfetch_if_missing = fetch_if_missing_store;\n+\t\toid_array_clear(&to_fetch);\n \t}\n \tfor (i = 0; i < index->cache_nr; i++) {\n \t\tstruct cache_entry *ce = index->cache[i];\n \n \t\tif (ce->ce_flags & CE_UPDATE) {\n \t\t\tif (ce->ce_flags & CE_WT_REMOVE)\n \t\t\t\tdie(\"BUG: both update and delete flags are set on %s\",\n \t\t\t\t    ce->name);\n \t\t\tdisplay_progress(progress, ++cnt);\n \t\t\tce->ce_flags &= ~CE_UPDATE;\n \t\t\tif (o->update && !o->dry_run) {\n \t\t\t\terrs |= checkout_entry(ce, &state, NULL);\n \t\t\t}\n \t\t}\n \t}\n-- \n2.16.3\n"},{"id":"342921","messageId":"c46f189d-7825-4d60-be71-a4d339c4fa43@gmail.com","threadId":"48140","inReplyTo":"b2380d1e-1d45-22cf-ba22-cf4cb02e1134@web.de","subject":"Re: [PATCH] unpack-trees: release oid_array after use in check_updates()","fromName":"Derrick Stolee","fromEmail":"stolee@gmail.com","sentAt":"2018-03-25T18:33:17Z","receivedAt":"2018-03-25T18:33:23Z","isPatch":true,"sender":{"key":"stolee@gmail.com","avatar":"https://avatars.githubusercontent.com/u/570044?v=4"},"body":"On 3/25/2018 12:31 PM, René Scharfe wrote:\n> Signed-off-by: Rene Scharfe <l.s.r@web.de>\n> ---\n> That leak was introduced by c0c578b33c (unpack-trees: batch fetching of\n> missing blobs).\n>\n>   unpack-trees.c | 1 +\n>   1 file changed, 1 insertion(+)\n>\n> diff --git a/unpack-trees.c b/unpack-trees.c\n> index d5685891a5..e73745051e 100644\n> --- a/unpack-trees.c\n> +++ b/unpack-trees.c\n> @@ -379,30 +379,31 @@ static int check_updates(struct unpack_trees_options *o)\n>   \t\tstruct oid_array to_fetch = OID_ARRAY_INIT;\n>   \t\tint fetch_if_missing_store = fetch_if_missing;\n>   \t\tfetch_if_missing = 0;\n>   \t\tfor (i = 0; i < index->cache_nr; i++) {\n>   \t\t\tstruct cache_entry *ce = index->cache[i];\n>   \t\t\tif ((ce->ce_flags & CE_UPDATE) &&\n>   \t\t\t    !S_ISGITLINK(ce->ce_mode)) {\n>   \t\t\t\tif (!has_object_file(&ce->oid))\n>   \t\t\t\t\toid_array_append(&to_fetch, &ce->oid);\n>   \t\t\t}\n>   \t\t}\n>   \t\tif (to_fetch.nr)\n>   \t\t\tfetch_objects(repository_format_partial_clone,\n>   \t\t\t\t      &to_fetch);\n>   \t\tfetch_if_missing = fetch_if_missing_store;\n> +\t\toid_array_clear(&to_fetch);\n>   \t}\n>   \tfor (i = 0; i < index->cache_nr; i++) {\n>   \t\tstruct cache_entry *ce = index->cache[i];\n>   \n>   \t\tif (ce->ce_flags & CE_UPDATE) {\n>   \t\t\tif (ce->ce_flags & CE_WT_REMOVE)\n>   \t\t\t\tdie(\"BUG: both update and delete flags are set on %s\",\n>   \t\t\t\t    ce->name);\n>   \t\t\tdisplay_progress(progress, ++cnt);\n>   \t\t\tce->ce_flags &= ~CE_UPDATE;\n>   \t\t\tif (o->update && !o->dry_run) {\n>   \t\t\t\terrs |= checkout_entry(ce, &state, NULL);\n>   \t\t\t}\n>   \t\t}\n>   \t}\n\nAck. Looks correct.\n\n-Stolee\n"}]}