2018-05-17 7:03 GMT+02:00 Charles Cui <charles.cui1...@gmail.com>:

> Hi Aleksander,
>
>    I have the requirements to return a bytea array for some functions in
> pg_thrift plugin.
> What I did was similar to the following,
>
> bytea** ret = palloc(len * sizeof(bytea*));
> for (int i = 0; i < len; i++) {
>    // allocate space
>    ret[i] = palloc(size);
>    // fill in ret[i]
>    ...
> }
> PG_RETURN_POINTER(ret);
> I can verify each ret[i] is correct by logging, but server crash when
> executed PG_RETURN_POINTER(ret).
> So, I am wondering what's the reason of the crash?
> and what's the recommended way (best practice) to construct a return value
> to be bytea array?
>

You should to set a size of any varlena structure.

check postgresql/src/backend/utils/adt/varlena.c code

When I started with PostgreSQL hacking my often problem was memory
allocation in bad (deallocated) context. Good to use own self compiled
version of PostgreSQL configured with --enable-cassert option.

Regards

Pavel

Reply via email to