Thread: BUG #6234: Memory leak from PQexec

BUG #6234: Memory leak from PQexec

From
"Vikas Mehta"
Date:
The following bug has been logged online:

Bug reference:      6234
Logged by:          Vikas Mehta
Email address:      mehta@roguewave.com
PostgreSQL version: 8.4.8
Operating system:   Windows
Description:        Memory leak from PQexec
Details:

Purify shows 448 bytes of memory leaks with PQexec:

[W] Summary of all memory leaks... {448 bytes, 11 blocks}
    [W] MLK: Memory leak of 128 bytes from 1 block allocated in
ERR_load_SSL_strings [SSLEAY32.DLL]
    [W] MLK: Memory leak of 128 bytes from 1 block allocated in
PQrequestCancel [LIBPQ.DLL]
    [W] MLK: Memory leak of 128 bytes from 1 block allocated in
ENGINE_load_ubsec [LIBEAY32.DLL]
    [W] MLK: Memory leak of 64 bytes from 8 blocks allocated in
add_error_table [COMERR32.DLL]


Test case:
==========

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <libpq-fe.h>



void createTestTable(PGconn* dbc)
{
    PGresult *res;

    printf("\n\nCreating Test Table.....\n");

    res = PQexec(dbc, "create table mytable (col1 int)");
    if (PQresultStatus(res) == PGRES_NONFATAL_ERROR || PQresultStatus(res)
== PGRES_FATAL_ERROR) {
        printf("!!!!! Failed to create test table.\n");
    }
    PQclear(res);
}


void dropTestTable(PGconn* dbc)
{
    PGresult *res;

    printf("\n\nDropping Test Table.....\n");

    res = PQexec(dbc, "drop table mytable");
    if (PQresultStatus(res) == PGRES_NONFATAL_ERROR || PQresultStatus(res)
== PGRES_FATAL_ERROR) {
        printf("!!!!! Failed to drop test table.\n");
    }
    PQclear(res);
}

int main()
{
    PGconn *dbc;

    dbc = PQconnectdb("host = magma.cvo.roguewave.com user = username
password = pwd dbname = db");

    if(dbc == 0 || PQstatus(dbc) == CONNECTION_BAD) {
        printf("!!!!! Failed to establish connection.\n");
    }

    createTestTable(dbc);

    dropTestTable(dbc);

    PQfinish(dbc);

    return 0;
}

Re: BUG #6234: Memory leak from PQexec

From
Craig Ringer
Date:
On 29/09/2011 6:22 AM, Vikas Mehta wrote:
> The following bug has been logged online:
>
> Bug reference:      6234
> Logged by:          Vikas Mehta
> Email address:      mehta@roguewave.com
> PostgreSQL version: 8.4.8
> Operating system:   Windows
> Description:        Memory leak from PQexec
> Details:
>
> Purify shows 448 bytes of memory leaks with PQexec:
>
> [W] Summary of all memory leaks... {448 bytes, 11 blocks}
>      [W] MLK: Memory leak of 128 bytes from 1 block allocated in
> ERR_load_SSL_strings [SSLEAY32.DLL]
>
It's not a leak, and it's not a bug. Please search the pgsql-general
archives for "valgrind" or "SSL_config".

--
Craig Ringer

Re: BUG #6234: Memory leak from PQexec

From
Craig Ringer
Date:
On Oct 4, 2011 2:14 AM, "Vikas Mehta" <Vikas.Mehta@roguewave.com> wrote:
>
> Thanks. I found posts on SSL leak reported by purify. However, I couldn't
find any information on the memory leak from PQrequestCancel. Is it a known
issue?

It's essentially the same issue. OpenSSL loads some strings, config
variables etc on demand/first use and doesn't bother to free them. This is
fine because they are only ever loaded once, so there is no continuous
growth with repeated invocations and no leak. Freeing them before program
exit is hard because of ordering issues, so they just let the OS clean it up
with the rest of the process's memory. That's perfectly correct.

If repeat invocations of your problem code within one program session cause
the heap to grow and the reported leak to get bigger / appear more times,
THEN it is a real leak and a real bug.

>
> -----Original Message-----
> From: Craig Ringer [mailto:ringerc@ringerc.id.au]
> Sent: Friday, September 30, 2011 12:02 AM
> To: Vikas Mehta
> Cc: pgsql-bugs@postgresql.org
> Subject: Re: [BUGS] BUG #6234: Memory leak from PQexec
>
> On 29/09/2011 6:22 AM, Vikas Mehta wrote:
> > The following bug has been logged online:
> >
> > Bug reference:      6234
> > Logged by:          Vikas Mehta
> > Email address:      mehta@roguewave.com
> > PostgreSQL version: 8.4.8
> > Operating system:   Windows
> > Description:        Memory leak from PQexec
> > Details:
> >
> > Purify shows 448 bytes of memory leaks with PQexec:
> >
> > [W] Summary of all memory leaks... {448 bytes, 11 blocks}
> >      [W] MLK: Memory leak of 128 bytes from 1 block allocated in
> > ERR_load_SSL_strings [SSLEAY32.DLL]
> >
> It's not a leak, and it's not a bug. Please search the pgsql-general
archives for "valgrind" or "SSL_config".
>
> --
> Craig Ringer

Re: BUG #6234: Memory leak from PQexec

From
Vikas Mehta
Date:
VGhhbmtzLiBJIGZvdW5kIHBvc3RzIG9uIFNTTCBsZWFrIHJlcG9ydGVkIGJ5
IHB1cmlmeS4gSG93ZXZlciwgSSBjb3VsZG4ndCBmaW5kIGFueSBpbmZvcm1h
dGlvbiBvbiB0aGUgbWVtb3J5IGxlYWsgZnJvbSBQUXJlcXVlc3RDYW5jZWwu
IElzIGl0IGEga25vd24gaXNzdWU/DQoNCi0tLS0tT3JpZ2luYWwgTWVzc2Fn
ZS0tLS0tDQpGcm9tOiBDcmFpZyBSaW5nZXIgW21haWx0bzpyaW5nZXJjQHJp
bmdlcmMuaWQuYXVdIA0KU2VudDogRnJpZGF5LCBTZXB0ZW1iZXIgMzAsIDIw
MTEgMTI6MDIgQU0NClRvOiBWaWthcyBNZWh0YQ0KQ2M6IHBnc3FsLWJ1Z3NA
cG9zdGdyZXNxbC5vcmcNClN1YmplY3Q6IFJlOiBbQlVHU10gQlVHICM2MjM0
OiBNZW1vcnkgbGVhayBmcm9tIFBRZXhlYw0KDQpPbiAyOS8wOS8yMDExIDY6
MjIgQU0sIFZpa2FzIE1laHRhIHdyb3RlOg0KPiBUaGUgZm9sbG93aW5nIGJ1
ZyBoYXMgYmVlbiBsb2dnZWQgb25saW5lOg0KPg0KPiBCdWcgcmVmZXJlbmNl
OiAgICAgIDYyMzQNCj4gTG9nZ2VkIGJ5OiAgICAgICAgICBWaWthcyBNZWh0
YQ0KPiBFbWFpbCBhZGRyZXNzOiAgICAgIG1laHRhQHJvZ3Vld2F2ZS5jb20N
Cj4gUG9zdGdyZVNRTCB2ZXJzaW9uOiA4LjQuOA0KPiBPcGVyYXRpbmcgc3lz
dGVtOiAgIFdpbmRvd3MNCj4gRGVzY3JpcHRpb246ICAgICAgICBNZW1vcnkg
bGVhayBmcm9tIFBRZXhlYw0KPiBEZXRhaWxzOg0KPg0KPiBQdXJpZnkgc2hv
d3MgNDQ4IGJ5dGVzIG9mIG1lbW9yeSBsZWFrcyB3aXRoIFBRZXhlYzoNCj4N
Cj4gW1ddIFN1bW1hcnkgb2YgYWxsIG1lbW9yeSBsZWFrcy4uLiB7NDQ4IGJ5
dGVzLCAxMSBibG9ja3N9DQo+ICAgICAgW1ddIE1MSzogTWVtb3J5IGxlYWsg
b2YgMTI4IGJ5dGVzIGZyb20gMSBibG9jayBhbGxvY2F0ZWQgaW4gDQo+IEVS
Ul9sb2FkX1NTTF9zdHJpbmdzIFtTU0xFQVkzMi5ETExdDQo+DQpJdCdzIG5v
dCBhIGxlYWssIGFuZCBpdCdzIG5vdCBhIGJ1Zy4gUGxlYXNlIHNlYXJjaCB0
aGUgcGdzcWwtZ2VuZXJhbCBhcmNoaXZlcyBmb3IgInZhbGdyaW5kIiBvciAi
U1NMX2NvbmZpZyIuDQoNCi0tDQpDcmFpZyBSaW5nZXINCg==