Finding memory corruption in an extension

Started by Jack Orensteinover 5 years ago3 messagesgeneral
Jump to latest
#1Jack Orenstein
jao@geophile.com

An extension I'm creating is causing Postgres to crash, almost certainly
due to memory corruption. I am using palloc0/pfree, calling SET_VARSIZE,
and generally following the procedures documented here:
https://www.postgresql.org/docs/12/xfunc-c.html. I am also testing my code
outside of Postgres (using alloc/free instead of palloc0/pfree), and
valgrind is not finding any corruption or leaks.

The crash is not completely reproducible, but when it does happen, it's
pretty fast -- create a table, insert a couple of rows, explain a query.
(My goal is to create a GIN index on my datatype, but this crash occurs
without the index.)

I'm interested in advice on how to go about hunting down my problem.
Something along the lines of a debugging malloc, or valgrind, for Postgres.

Jack Orenstein

#2Pavel Stehule
pavel.stehule@gmail.com
In reply to: Jack Orenstein (#1)
Re: Finding memory corruption in an extension

Hi

pá 8. 1. 2021 v 18:48 odesílatel Jack Orenstein <jao@geophile.com> napsal:

An extension I'm creating is causing Postgres to crash, almost certainly
due to memory corruption. I am using palloc0/pfree, calling SET_VARSIZE,
and generally following the procedures documented here:
https://www.postgresql.org/docs/12/xfunc-c.html. I am also testing my
code outside of Postgres (using alloc/free instead of palloc0/pfree), and
valgrind is not finding any corruption or leaks.

The crash is not completely reproducible, but when it does happen, it's
pretty fast -- create a table, insert a couple of rows, explain a query.
(My goal is to create a GIN index on my datatype, but this crash occurs
without the index.)

I'm interested in advice on how to go about hunting down my problem.
Something along the lines of a debugging malloc, or valgrind, for Postgres.

The basic feature is using postgres compiled with --enable-cassert flag. It
does lot of checks of memory corruptions

Regards

Pavel

Show quoted text

Jack Orenstein

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#2)
Re: Finding memory corruption in an extension

Pavel Stehule <pavel.stehule@gmail.com> writes:

pá 8. 1. 2021 v 18:48 odesílatel Jack Orenstein <jao@geophile.com> napsal:

I'm interested in advice on how to go about hunting down my problem.
Something along the lines of a debugging malloc, or valgrind, for Postgres.

The basic feature is using postgres compiled with --enable-cassert flag. It
does lot of checks of memory corruptions

Yeah, you should absolutely use --enable-cassert when working on C code.

If you need valgrind, there's advice about how to run it at

https://wiki.postgresql.org/wiki/Valgrind

regards, tom lane