On Wed, Aug 23, 2023 at 3:48 PM <[email protected]> wrote:
> From: "alloc.young" <[email protected]>
>
> Fix memory leak in hmp_info_vcpu_dirty_limit,use g_autoptr
> handle memory deallocation, alse use g_free to match g_malloc
> && g_new functions.
>
> Signed-off-by: alloc.young <[email protected]>
> ---
> softmmu/dirtylimit.c | 26 ++++++++++++--------------
> 1 file changed, 12 insertions(+), 14 deletions(-)
>
> [...]
> diff --git a/softmmu/dirtylimit.c b/softmmu/dirtylimit.c
> index 3c275ee55b..fa959d7743 100644
> --- a/softmmu/dirtylimit.c
> +++ b/softmmu/dirtylimit.c
> @@ -100,7 +100,7 @@ static void vcpu_dirty_rate_stat_collect(void)
> stat.rates[i].dirty_rate;
> }
>
> - free(stat.rates);
> + g_free(stat.rates);
> }
>
> Code optimization.
> static void *vcpu_dirty_rate_stat_thread(void *opaque)
> @@ -171,10 +171,10 @@ void vcpu_dirty_rate_stat_initialize(void)
>
> void vcpu_dirty_rate_stat_finalize(void)
> {
> - free(vcpu_dirty_rate_stat->stat.rates);
> + g_free(vcpu_dirty_rate_stat->stat.rates);
> vcpu_dirty_rate_stat->stat.rates = NULL;
>
> - free(vcpu_dirty_rate_stat);
> + g_free(vcpu_dirty_rate_stat);
> vcpu_dirty_rate_stat = NULL;
> }
>
> Likewise...
> @@ -220,10 +220,10 @@ void dirtylimit_state_initialize(void)
>
> void dirtylimit_state_finalize(void)
> {
> - free(dirtylimit_state->states);
> + g_free(dirtylimit_state->states);
> dirtylimit_state->states = NULL;
>
> - free(dirtylimit_state);
> + g_free(dirtylimit_state);
> dirtylimit_state = NULL;
>
> Likewise...
> trace_dirtylimit_state_finalize();
> @@ -653,7 +653,8 @@ struct DirtyLimitInfoList
> *qmp_query_vcpu_dirty_limit(Error **errp)
>
> void hmp_info_vcpu_dirty_limit(Monitor *mon, const QDict *qdict)
> {
> - DirtyLimitInfoList *limit, *head, *info = NULL;
> + DirtyLimitInfoList *info;
> + g_autoptr(DirtyLimitInfoList) head = NULL;
> Error *err = NULL;
>
> if (!dirtylimit_in_service()) {
> @@ -661,20 +662,17 @@ void hmp_info_vcpu_dirty_limit(Monitor *mon, const
> QDict *qdict)
> return;
> }
>
> - info = qmp_query_vcpu_dirty_limit(&err);
> + head = qmp_query_vcpu_dirty_limit(&err);
> if (err) {
> hmp_handle_error(mon, err);
> return;
> }
>
> - head = info;
> - for (limit = head; limit != NULL; limit = limit->next) {
> + for (info = head; info != NULL; info = info->next) {
> monitor_printf(mon, "vcpu[%"PRIi64"], limit rate %"PRIi64 "
> (MB/s),"
> " current rate %"PRIi64 " (MB/s)\n",
> - limit->value->cpu_index,
> - limit->value->limit_rate,
> - limit->value->current_rate);
> + info->value->cpu_index,
> + info->value->limit_rate,
> + info->value->current_rate);
> }
> -
> - g_free(info);
>
Fix memory leak.
> }
> --
> 2.39.3
>
> I'll choose the memory leak modifications to keep the patch focused on a
single
independent issue.
Anyway,
Reviewed-by: Hyman Huang(黄勇) <[email protected]>
--
Best regards