Hi hackers, I have a question on the code below:
Datum numeric_cmp(PG_FUNCTION_ARGS) { Numeric num1 = PG_GETARG_NUMERIC(0); Numeric num2 = PG_GETARG_NUMERIC(1); int result; result = cmp_numerics(num1, num2); PG_FREE_IF_COPY(num1, 0); PG_FREE_IF_COPY(num2, 1); PG_RETURN_INT32(result); } It seems to me that num1 is a copy of fcinfo->arg[0]. It is passed to the function cmp_numerics(), It's value remains the same after the call. Also, cmp_numerics() does not have a handle to fcinfo, so it can't modify fcinfo->arg[0]. Isn't it true that pfree() will never be called by PG_FREE_IF_COPY? Cheers, -cktan