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);
|
rc = do_push(flags, push_options, remote);
|
||||||
string_list_clear(&push_options_cmdline, 0);
|
string_list_clear(&push_options_cmdline, 0);
|
||||||
string_list_clear(&push_options_config, 0);
|
string_list_clear(&push_options_config, 0);
|
||||||
|
clear_cas_option(&cas);
|
||||||
if (rc == -1)
|
if (rc == -1)
|
||||||
usage_with_options(push_usage, options);
|
usage_with_options(push_usage, options);
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -344,5 +344,6 @@ int cmd_send_pack(int argc,
|
|||||||
free_refs(local_refs);
|
free_refs(local_refs);
|
||||||
refspec_clear(&rs);
|
refspec_clear(&rs);
|
||||||
oid_array_clear(&shallow);
|
oid_array_clear(&shallow);
|
||||||
|
clear_cas_option(&cas);
|
||||||
return ret;
|
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
|
* Compare-and-swap
|
||||||
*/
|
*/
|
||||||
static void clear_cas_option(struct push_cas_option *cas)
|
void clear_cas_option(struct push_cas_option *cas)
|
||||||
{
|
{
|
||||||
int i;
|
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);
|
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 *);
|
int is_empty_cas(const struct push_cas_option *);
|
||||||
void apply_push_cas(struct push_cas_option *, struct remote *, struct ref *);
|
void apply_push_cas(struct push_cas_option *, struct remote *, struct ref *);
|
||||||
|
|||||||
Reference in New Issue
Block a user