send-pack: free cas options before exit
The send-pack --force-with-lease option populates a push_cas_option struct with allocated strings. Exiting without cleaning this up will cause leak-checkers to complain. We can fix this by calling clear_cas_option(), after making it publicly available. Previously it was used only for resetting the list when we saw --no-force-with-lease. The git-push command has the same "leak", though in this case it won't trigger a leak-checker since it stores the push_cas_option struct as a global rather than on the stack (and is thus reachable even after main() exits). I've added cleanup for it here anyway, though, as future-proofing. The leak is triggered by t5541 (it tests --force-with-lease over http, which requires a separate send-pack process under the hood), but we can't mark it as leak-free yet. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
753f6708d0
commit
05372c28be
@ -669,6 +669,7 @@ int cmd_push(int argc,
|
||||
rc = do_push(flags, push_options, remote);
|
||||
string_list_clear(&push_options_cmdline, 0);
|
||||
string_list_clear(&push_options_config, 0);
|
||||
clear_cas_option(&cas);
|
||||
if (rc == -1)
|
||||
usage_with_options(push_usage, options);
|
||||
else
|
||||
|
@ -344,5 +344,6 @@ int cmd_send_pack(int argc,
|
||||
free_refs(local_refs);
|
||||
refspec_clear(&rs);
|
||||
oid_array_clear(&shallow);
|
||||
clear_cas_option(&cas);
|
||||
return ret;
|
||||
}
|
||||
|
2
remote.c
2
remote.c
@ -2544,7 +2544,7 @@ struct ref *get_stale_heads(struct refspec *rs, struct ref *fetch_map)
|
||||
/*
|
||||
* Compare-and-swap
|
||||
*/
|
||||
static void clear_cas_option(struct push_cas_option *cas)
|
||||
void clear_cas_option(struct push_cas_option *cas)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
1
remote.h
1
remote.h
@ -409,6 +409,7 @@ struct push_cas_option {
|
||||
};
|
||||
|
||||
int parseopt_push_cas_option(const struct option *, const char *arg, int unset);
|
||||
void clear_cas_option(struct push_cas_option *);
|
||||
|
||||
int is_empty_cas(const struct push_cas_option *);
|
||||
void apply_push_cas(struct push_cas_option *, struct remote *, struct ref *);
|
||||
|
Reference in New Issue
Block a user