[ psqlodbc-Bugs-1010758 ] Potential memory leak with savepoints and cursors

From: <noreply(at)pgfoundry(dot)org>
To: noreply(at)pgfoundry(dot)org
Subject: [ psqlodbc-Bugs-1010758 ] Potential memory leak with savepoints and cursors
Date: 2010-01-28 19:03:07
Message-ID: 20100128190307.2BCFA10715D7@pgfoundry.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-odbc

Bugs item #1010758, was opened at 2010-01-28 18:41
You can respond by visiting:
http://pgfoundry.org/tracker/?func=detail&atid=538&aid=1010758&group_id=1000125

Category: None
Group: None
Status: Open
Resolution: None
Priority: 3
Submitted By: Florian Nigsch (fnigsch)
Assigned to: Nobody (None)
Summary: Potential memory leak with savepoints and cursors

Initial Comment:
Problem: When executing a large number (100,000s) of queries the server eventually exhausts available memory and crashes.

Likely cause: Problem with the release of savepoints; as seen in the PostgreSQL logs below, a savepoint is always created immediately before the cursor is closed, and this savepoint is then released once the cursor is closed. Shouldn't the savepoint be released before the enclosing cursor is closed? The logs below show that the savepoint creation/release is not enclosed by the cursor creation/destruction.

psqlODBC driver used: psqlodbc_08_04_0100.zip
PostgreSQL server: 8.4.0

LOG: statement: BEGIN;declare "SQL_CUR05898D98" cursor with hold for select * from ...;fetch 100 in "SQL_CUR05898D98"
LOG: statement: declare "SQL_CUR0589C5B0" cursor for select n.nspname, c.relname, a.attname, a.atttypid, t.typname, a.attnum, a.attlen, a.atttypmod, a.attnotnull, c.relhasrules, c.relkind, c.
oid, d.adsrc, case t.typtype when 'd' then t.typbasetype else 0 end, t.typtypmod from (((pg_catalog.pg_class c inner join pg_catalog.pg_namespace n on n.oid = c.relnamespace and c.oid = 632801
8) inner join pg_catalog.pg_attribute a on (not a.attisdropped) and a.attnum > 0 and a.attrelid = c.oid) inner join pg_catalog.pg_type t on t.oid = a.atttypid) left outer join pg_attrdef d on
a.atthasdef and d.adrelid = a.attrelid and d.adnum = a.attnum order by n.nspname, c.relname, attnum;fetch 100 in "SQL_CUR0589C5B0"
LOG: statement: SAVEPOINT _per_query_svp_;close "SQL_CUR0589C5B0";RELEASE _per_query_svp_
LOG: statement: SAVEPOINT _per_query_svp_;close "SQL_CUR05898D98";RELEASE _per_query_svp_
LOG: statement: declare "SQL_CUR05898D98" cursor with hold for select * from ...;fetch 100 in "SQL_CUR05898D98"
LOG: statement: SAVEPOINT _per_query_svp_;close "SQL_CUR05898D98";RELEASE _per_query_svp_
LOG: statement: declare "SQL_CUR05898D98" cursor with hold for select * from ...;fetch 100 in "SQL_CUR05898D98"
LOG: statement: SAVEPOINT _per_query_svp_;close "SQL_CUR05898D98";RELEASE _per_query_svp_

----------------------------------------------------------------------

Comment By: Tom Lane (tgl)
Date: 2010-01-28 19:03

Message:
Try something newer than 8.4.0 --- I don't see a leak with that type of sequence in CVS tip, either HEAD or 8.4 branch.

----------------------------------------------------------------------

You can respond by visiting:
http://pgfoundry.org/tracker/?func=detail&atid=538&aid=1010758&group_id=1000125

Browse pgsql-odbc by date

  From Date Subject
Next Message noreply 2010-01-28 19:48:33 [ psqlodbc-Bugs-1010758 ] Potential memory leak with savepoints and cursors
Previous Message noreply 2010-01-28 18:41:25 [ psqlodbc-Bugs-1010758 ] Potential memory leak with savepoints and cursors