Thread

Commits

  1. Make comment in fmgr.h match the one in fmgr.c.

  1. flinfo NULL in DirectFunctionCall callee?

    Paul A Jungwirth <pj@illuminatedcomputing.com> — 2019-08-26T14:51:27Z

    Hello,
    
    I'm writing a multirange_cmp function which calls range_cmp to compare
    individual elements. It looks like this:
    
    cmp = DatumGetInt32(DirectFunctionCall2(
            range_cmp,
            RangeTypePGetDatum(r1),
            RangeTypePGetDatum(r2)));
    
    But I get a segfault when range_cmp tries to reach its
    fcinfo->flinfo->fn_extra, because it has a NULL flinfo, as you can see
    from these debugging messages:
    
    NOTICE:  multirange_cmp fcinfo = 0x7f875a0a66c0
    NOTICE:  multirange_cmp flinfo = 0x7f875a0a6690
    NOTICE:  multirange_cmp fn_extra = 0x7f875a099450
    NOTICE:  range_cmp fcinfo = 0x7ffee5ff9820
    NOTICE:  range_cmp flinfo = 0x0
    
    Is it expected for flinfo to be null when using DirectFunctionCall*?
    Is there something else I should use instead? It looks like
    FunctionCall2 would let me pass my own flinfo, but I'm not sure how to
    set that up first.
    
    Thanks!
    Paul
    
    
    
    
  2. Re: flinfo NULL in DirectFunctionCall callee?

    Tom Lane <tgl@sss.pgh.pa.us> — 2019-08-26T15:11:58Z

    Paul A Jungwirth <pj@illuminatedcomputing.com> writes:
    > Is it expected for flinfo to be null when using DirectFunctionCall*?
    
    Yes, per the comment on those functions:
    
     * These are for invocation of a specifically named function with a
     * directly-computed parameter list.  Note that neither arguments nor result
     * are allowed to be NULL.  Also, the function cannot be one that needs to
     * look at FmgrInfo, since there won't be any.
    
    > Is there something else I should use instead? It looks like
    > FunctionCall2 would let me pass my own flinfo, but I'm not sure how to
    > set that up first.
    
    Use fmgr_info() or a sibling to fill in the FmgrInfo.
    
    			regards, tom lane
    
    
    
    
  3. Re: flinfo NULL in DirectFunctionCall callee?

    Paul A Jungwirth <pj@illuminatedcomputing.com> — 2019-08-26T17:41:15Z

    On Mon, Aug 26, 2019 at 8:12 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:
    >
    > Paul A Jungwirth <pj@illuminatedcomputing.com> writes:
    > > Is it expected for flinfo to be null when using DirectFunctionCall*?
    >
    > Yes, per the comment on those functions:
    >
    >  * These are for invocation of a specifically named function with a
    >  * directly-computed parameter list.  Note that neither arguments nor result
    >  * are allowed to be NULL.  Also, the function cannot be one that needs to
    >  * look at FmgrInfo, since there won't be any.
    
    Thanks Tom! Alas I saw that same comment in fmgr.h but it was missing
    the last sentence. Would you like a patch updating it there? Is that
    the kind of thing you make CF entries for? (And sorry this is veering
    into pgsql-hackers territory....)
    
    > Use fmgr_info() or a sibling to fill in the FmgrInfo.
    
    Thanks for this too! I wound up just adding a range_cmp_internal to
    avoid the whole issue, which is a pattern already used by a bunch of
    the other range_* functions.
    
    Yours,
    Paul
    
    
    
    
  4. Re: flinfo NULL in DirectFunctionCall callee?

    Tom Lane <tgl@sss.pgh.pa.us> — 2019-08-26T18:34:07Z

    Paul A Jungwirth <pj@illuminatedcomputing.com> writes:
    > On Mon, Aug 26, 2019 at 8:12 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:
    >> Yes, per the comment on those functions:
    >> * These are for invocation of a specifically named function with a
    >> * directly-computed parameter list.  Note that neither arguments nor result
    >> * are allowed to be NULL.  Also, the function cannot be one that needs to
    >> * look at FmgrInfo, since there won't be any.
    
    > Thanks Tom! Alas I saw that same comment in fmgr.h but it was missing
    > the last sentence.
    
    Oh, hm, that's not very nice.  Fixed.
    
    > Would you like a patch updating it there? Is that
    > the kind of thing you make CF entries for?
    
    Not really worth the overhead, for something as simple as this.
    
    			regards, tom lane