From: Pranit Bauva Date: Wed, 08 Jun 2016 08:09:03 GMT Subject: Re: [PATCH 1/4] bisect--helper: `bisect_clean_state` shell function in C Message-ID: In-Reply-To: Hey Eric, On Wed, Jun 8, 2016 at 1:32 PM, Eric Sunshine wrote: > On Wed, Jun 8, 2016 at 3:46 AM, Pranit Bauva wrote: >> On Wed, Jun 8, 2016 at 4:01 AM, Eric Sunshine wrote: >>> On Tue, Jun 7, 2016 at 4:54 PM, Pranit Bauva wrote: >>>> + struct string_list *refs = cb_data; >>>> + char *ref = xstrfmt("refs/bisect/%s", refname); >>> >>> Here you're allocating a string... >>> >>>> + string_list_append(refs, ref); >>>> + return 0; >>>> +} >>>> + >>>> +int bisect_clean_state(void) >>>> +{ >>>> + int result = 0; >>>> + struct string_list refs_for_removal = STRING_LIST_INIT_DUP; >>>> + for_each_ref_in("refs/bisect/", mark_for_removal, (void *) &refs_for_removal); >>> >>> ...and the allocated string gets inserted into a string_list which >>> itself duplicates the string (STRING_LIST_INIT_DUP), so this is >>> leaking the string you created with xstrfmt(), isn't it? >> >> Yes nice catch. I would prefer using the string_list with >> STRING_LIST_INIT_DUP and free the ref. > > That's unnecessarily wasteful. Better would be to to use STRING_LIST_INIT_NODUP. Sure I will try it out! Regards, Pranit Bauva