Обсуждение: Optimize duplicate code and fix memory leak in function fetch_remote_table_info()

Поиск
Список
Период
Сортировка

Optimize duplicate code and fix memory leak in function fetch_remote_table_info()

От
Yongtao Huang
Дата:
This patch fixes two things in the function fetch_remote_table_info().

(1) pfree(pub_names.data) to avoid potential memory leaks.
(2) 2 pieces of code can do the same work,

``` C
foreach(lc, MySubscription->publications)
{
    if (foreach_current_index(lc) > 0)
        appendStringInfoString(&pub_names, ", ");
    appendStringInfoString(&pub_names, quote_literal_cstr(strVal(lfirst(lc))));
}
```
and
``` C
foreach_node(String, pubstr, MySubscription->publications)
{
    char       *pubname = strVal(pubstr);

    if (foreach_current_index(pubstr) > 0)
        appendStringInfoString(&pub_names, ", ");

    appendStringInfoString(&pub_names, quote_literal_cstr(pubname));
}
```
I wanna integrate them into one function `make_pubname_list()` to make the code neater.

Thanks for your time.

Regards

Yongtao Huang
Вложения

Re: Optimize duplicate code and fix memory leak in function fetch_remote_table_info()

От
Michael Paquier
Дата:
On Fri, Jan 19, 2024 at 10:42:46PM +0800, Yongtao Huang wrote:
> This patch fixes two things in the function fetch_remote_table_info().
>
> (1) *pfree(pub_names.data)* to avoid potential memory leaks.

True that this code puts some effort in cleaning up the memory used
locally.

> (2) 2 pieces of code can do the same work,
> ```
> I wanna integrate them into one function `make_pubname_list()` to make the
> code neater.

It does not strike me as a huge problem to let the code be as it is on
HEAD when building the lists, FWIW, as we are talking about two places
and there is clarity in keeping the code as it is.
--
Michael

Вложения

Re: Optimize duplicate code and fix memory leak in function fetch_remote_table_info()

От
Yongtao Huang
Дата:
Thanks for your review.

(1)  I think *pfree(pub_names.data)* is necessary. 
(2)  Agree with you. Considering that the new function is only called twice, not encapsulating it into a function is not a huge problem.

Best wishes

Yongtao Huang

Michael Paquier <michael@paquier.xyz> 于2024年1月20日周六 11:13写道:
On Fri, Jan 19, 2024 at 10:42:46PM +0800, Yongtao Huang wrote:
> This patch fixes two things in the function fetch_remote_table_info().
>
> (1) *pfree(pub_names.data)* to avoid potential memory leaks.

True that this code puts some effort in cleaning up the memory used
locally.

> (2) 2 pieces of code can do the same work,
> ```
> I wanna integrate them into one function `make_pubname_list()` to make the
> code neater.

It does not strike me as a huge problem to let the code be as it is on
HEAD when building the lists, FWIW, as we are talking about two places
and there is clarity in keeping the code as it is.
--
Michael
Вложения
Yongtao Huang <yongtaoh2022@gmail.com> writes:
> (1)  I think *pfree(pub_names.data)* is necessary.

Really?

It looks to me like copy_table, and thence fetch_remote_table_info,
is called once within a transaction.  So whatever it leaks will be
released at transaction end.  This is a good thing, because it's
messy enough that I seriously doubt that there aren't other leaks
in it, or that it'd be practical to expect that it can be made
to never leak anything.

If anything, I'd be inclined to remove the random pfree's that
are in it now.  It's unlikely that they constitute a net win
compared to allowing memory context reset to clean things up.

            regards, tom lane



Re: Optimize duplicate code and fix memory leak in function fetch_remote_table_info()

От
Yongtao Huang
Дата:
Hi,

>  So whatever it leaks will be released at the transaction end.

I learned it. thank you very much for your explanation.

Regards,
Yongtao Huang

Tom Lane <tgl@sss.pgh.pa.us> 于2024年1月20日周六 12:34写道:
Yongtao Huang <yongtaoh2022@gmail.com> writes:
> (1)  I think *pfree(pub_names.data)* is necessary.

Really?

It looks to me like copy_table, and thence fetch_remote_table_info,
is called once within a transaction.  So whatever it leaks will be
released at transaction end.  This is a good thing, because it's
messy enough that I seriously doubt that there aren't other leaks
in it, or that it'd be practical to expect that it can be made
to never leak anything.

If anything, I'd be inclined to remove the random pfree's that
are in it now.  It's unlikely that they constitute a net win
compared to allowing memory context reset to clean things up.

                        regards, tom lane