From: | Dave Cramer <pg(at)fastcrypt(dot)com> |
---|---|
To: | Albe Laurenz <all(at)adv(dot)magwien(dot)gv(dot)at> |
Cc: | <pgsql-jdbc(at)postgresql(dot)org> |
Subject: | Re: Memory leak in 8.0 JDBC driver? |
Date: | 2005-08-12 15:56:12 |
Message-ID: | 1E469344-B19D-424E-A6DA-11B159347F1F@fastcrypt.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-jdbc |
On 12-Aug-05, at 11:15 AM, Albe Laurenz wrote:
> I think that I have found the memory leak, and it is indeed in the
> JDBC
> driver.
> All code references in the following refer to the 8.0-312 JDBC Source.
>
> I have an org.postgresql.jdbc3.Jdbc3PreparedStatement containing
> INSERT INTO PARENT (ID, NAME, NUMMER) VALUES (?, ?, ?)
> I execute this statement thousands of times with different parameters.
> After each execution I commit().
> Some of these statements fail due to a constraint violation, then I
> rollback().
>
> Whenever this statement is executed *and fails*, execution reaches
> org.postgresql.core.v3.QueryExecutorImpl.processResults(), line 1280
> where an org.postgresql.util.PSQLWarning is retrieved with the
> contents:
> LOG: statement: INSERT INTO PARENT (ID, NAME, NUMMER) VALUES ($1, $2,
> $3)
>
> The handler that handles the warning is the anonymous class in
> org.postgresql.core.v3.QueryExecutorImpl.sendQueryPreamble(), line
> 381.
>
> This in turn calls
> org.postgresql.jdbc2.AbstractJdbc2Statement.StatementResultHandler.han
> dl
> eWarning(), line 191.
>
> This causes the SQLWarning to be appended at the end of the warning
> chain of
> the prepared statement, as you can see in
> org.postgresql.jdbc2.AbstractJdbc2Statement.addWarning(), line 546.
>
> The problem is that the warning chain is never cleared. According
> to the
> documentation of java.sql.Statement.getWarnings(),
> 'The warning chain is automatically cleared each time a statement is
> (re)executed'
> This obviously does not happen.
>
> Indeed, when searching the source of the JDBC driver, I cannot find a
> single reference
> to the clearWarnings() method, nor is
> org.postgresql.jdbc2.AbstractJdbc2Statement.warnings
> ever reset directly.
>
> The warnings chain grows endlessly and gobbles up the heap.
>
> I guess I should file a bug report for this, right?
You just did, thanks
Dave
>
> Yours,
> Laurenz Albe
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 2: Don't 'kill -9' the postmaster
>
>
From | Date | Subject | |
---|---|---|---|
Next Message | Jiangyi | 2005-08-12 16:47:23 | problem with stored procedure ,transaction and jdbc |
Previous Message | Albe Laurenz | 2005-08-12 15:15:08 | Re: Memory leak in 8.0 JDBC driver? |