Memory leak in SPI_finish call

From: Jorge Arévalo <jorge(dot)arevalo(at)deimos-space(dot)com>
To: pgsql-general(at)postgresql(dot)org
Subject: Memory leak in SPI_finish call
Date: 2011-04-05 13:47:20
Message-ID: BANLkTin4Uvnn9OaJ1S+7HDjwAH6jin8+wA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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(dot)arevalo(at)deimos-space(dot)com
http://es.linkedin.com/in/jorgearevalo80
http://mobility.grupodeimos.com/
http://gis4free.wordpress.com
http://geohash.org/ezjqgrgzz0g

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Vick Khera 2011-04-05 13:49:57 Re: Foreign key and locking problem
Previous Message Craig Ringer 2011-04-05 13:11:41 Re: Named advisory locks