Memory leak in SPI_finish call - Mailing list pgsql-general

From Jorge Arévalo
Subject Memory leak in SPI_finish call
Date
Msg-id BANLkTin4Uvnn9OaJ1S+7HDjwAH6jin8+wA@mail.gmail.com
Whole thread Raw
Responses Re: Memory leak in SPI_finish call
List pgsql-general
Hello,

I'm having problems with a PostgreSQL server side C-function. It's not
an aggregate function (operates over a only row of data). When the
function is called over tables with ~4000 rows, it causes postgres
backend crash with SEGFAULT. I know the error is a kind of
"cumulative", because with 3460 rows works fine, but from 3461 fails
with SEGFAULT.

Debugging, I've found the problem is a SPI_finish call. If I comment
the call, the function ends without errors. The only problem is a
warning message is raised, because I skipped the SPI_finish call.

I'm working with postgres 8.4.7 in a Ubuntu 9.10 machine. Same problem
in Windows machine, anyway. Things I've tried:

- Quit SPI_finish call, obviously. But it's not a solution

- Modify log configuration: log_min_messages=debug5,
log_error_verbosity=verbose, log_min_error_statement=debug5,
log_min_duration_statement=0, log_connections=on,
log_disconnections=on, log_statment=all. I can't see any conclussion.
Here, a log example:
http://dl.dropbox.com/u/6599273/postgresql-2011-04-04_195420.log. The
function that crashes is MapAlgebra.

- Attach postgres process to GDB (gdb --pid=...). When I connect with
PostgreSQL via psql/pgadmin, the backend creates 2 new processes in
idle state, until I execute a query. One connected to the postgres
database (I'm using postgres user) and another one connected to my
testing database. I've tried to attach a gdb instance to both
processes.

When I attach gdb to the process connected with my testing database, I
get :"Program exited with code 02". And no more. No core dumped. I've
looked for that error, and looks like it depends on the software that
caused the signal, not gdb.

When I attach gdb to the process connected with postgres database, I
get "Program received signal SIGQUIT, Quit.
0x00651422 in __kernel_vsyscall ()". No more information. No core dumped.

So, what can I do to find the error, apart from that things? Any clue
with the information posted above?

Thanks in advance,

--
Jorge Arévalo
Internet & Mobilty Division, DEIMOS
jorge.arevalo@deimos-space.com
http://es.linkedin.com/in/jorgearevalo80
http://mobility.grupodeimos.com/
http://gis4free.wordpress.com
http://geohash.org/ezjqgrgzz0g

pgsql-general by date:

Previous
From: Craig Ringer
Date:
Subject: Re: Named advisory locks
Next
From: Vick Khera
Date:
Subject: Re: Foreign key and locking problem