Thread

  1. BUG #19073: there are meaningless code in _SPI_execute_plan() when canSetTag is true

    PG Bug reporting form <noreply@postgresql.org> — 2025-10-05T02:29:34Z

    The following bug has been logged on the website:
    
    Bug reference:      19073
    Logged by:          Webbo Han
    Email address:      webbohan@qq.com
    PostgreSQL version: 18.0
    Operating system:   all
    Description:        
    
    In function _SPI_execute_plan(), `my_tuptable` is local variable and
    initialized as NULL.
    If plan is canSetTag subqueries, `SPI_freetuptable(my_tuptable)` is
    meaningless, because `my_tuptable` is NULL.
    We'd better remove this code.
    
    
  2. 回复:BUG #19073: there are meaningless code in _SPI_execute_plan() when canSetTag is true

    webbohan <webbohan@qq.com> — 2025-10-05T10:05:59Z

    there is patch.
    I have remove the meaningless code.
    
    
    
    
    ------------------&nbsp;原始邮件&nbsp;------------------
    发件人:                                                                                                                        "webbohan"                                                                                    <noreply@postgresql.org&gt;;
    发送时间:&nbsp;2025年10月5日(星期天) 上午10:29
    收件人:&nbsp;"pgsql-bugs"<pgsql-bugs@lists.postgresql.org&gt;;
    抄送:&nbsp;"webbohan"<webbohan@qq.com&gt;;
    主题:&nbsp;BUG #19073: there are meaningless code in _SPI_execute_plan() when canSetTag is true
    
    
    
    The following bug has been logged on the website:
    
    Bug reference:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 19073
    Logged by:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Webbo Han
    Email address:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; webbohan@qq.com
    PostgreSQL version: 18.0
    Operating system:&nbsp;&nbsp; all
    Description:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    
    In function _SPI_execute_plan(), `my_tuptable` is local variable and
    initialized as NULL.
    If plan is canSetTag subqueries, `SPI_freetuptable(my_tuptable)` is
    meaningless, because `my_tuptable` is NULL.
    We'd better remove this code.
  3. Re: BUG #19073: there are meaningless code in _SPI_execute_plan() when canSetTag is true

    Euler Taveira <euler@eulerto.com> — 2025-10-05T14:47:59Z

    On Sat, Oct 4, 2025, at 11:29 PM, PG Bug reporting form wrote:
    > In function _SPI_execute_plan(), `my_tuptable` is local variable and
    > initialized as NULL.
    > If plan is canSetTag subqueries, `SPI_freetuptable(my_tuptable)` is
    > meaningless, because `my_tuptable` is NULL.
    > We'd better remove this code.
    >
    
    There could be multiple statements. The first case will call SPI_freetuptable()
    and it is a noop. The code path you are referring to is inside a foreach loop
    and a previous statement might set my_tuptable and needs to be freed before
    reusing it. That's exactly what the comment says.
    
                /*
                 * The last canSetTag query sets the status values returned to the
                 * caller.  Be careful to free any tuptables not returned, to
                 * avoid intra-transaction memory leak.
                 */
                if (canSetTag)
                {
                    my_processed = _SPI_current->processed;
                    SPI_freetuptable(my_tuptable);
                    my_tuptable = _SPI_current->tuptable;
                    my_res = res; 
                }
    
    
    -- 
    Euler Taveira
    EDB   https://www.enterprisedb.com/
    
    
    
    
  4. Re: BUG #19073: there are meaningless code in _SPI_execute_plan() when canSetTag is true

    Tom Lane <tgl@sss.pgh.pa.us> — 2025-10-05T15:48:33Z

    "Euler Taveira" <euler@eulerto.com> writes:
    > On Sat, Oct 4, 2025, at 11:29 PM, PG Bug reporting form wrote:
    >> If plan is canSetTag subqueries, `SPI_freetuptable(my_tuptable)` is
    >> meaningless, because `my_tuptable` is NULL.
    
    > There could be multiple statements. The first case will call SPI_freetuptable()
    > and it is a noop. The code path you are referring to is inside a foreach loop
    > and a previous statement might set my_tuptable and needs to be freed before
    > reusing it. That's exactly what the comment says.
    
    Yeah.  You'd only reach this case if there were multiple SQL
    statements in the string given to SPI_execute() or similar,
    but that's perfectly legal.
    
    			regards, tom lane