On Wed, Jun 8, 2016 at 10:02 AM, Eric Sunshine <[email protected]> wrote:
> On Wed, Jun 8, 2016 at 3:46 AM, Pranit Bauva <[email protected]> wrote:
>> On Wed, Jun 8, 2016 at 4:01 AM, Eric Sunshine <[email protected]>
>> wrote:
>>> On Tue, Jun 7, 2016 at 4:54 PM, Pranit Bauva <[email protected]> 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.
In this case it is not possible to append "BISECT_HEAD" to
'refs_for_removal' before calling delete_refs() like this:
+ for_each_ref_in("refs/bisect/", mark_for_removal, (void *)
&refs_for_removal);
+ string_list_append(&refs_for_removal, "BISECT_HEAD");
+ result = delete_refs(&refs_for_removal);
+ string_list_clear(&refs_for_removal, 0);
And I think it's better to delete all the refs in the same call to
delete_refs().
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html