Search Postgresql Archives

Huge amount of memory errors with libpq

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I'm writing a server application in C that needs to interact with a postgre 
database, but on my development server I'm getting tons of memory errors from 
valgrind.  There are enough of them that it's causing problems, like data 
stored in a char* is magically changing after calling PQexec().
I'm not having any of these issues on my production server, which is odd.  
Maybe there is some configuration difference.

My development server was initially running 8.4.4 on Gentoo.  I downgraded to 
8.1.21 (still on Gentoo) to match my CentOS production server to see if the 
problems would go away, but they didn't.

I set up a simple test program that links to libpq to see if it was a problem 
in libpq or with my program.

#include <stdio.h>
#include <stdlib.h>
#include "libpq-fe.h"

int main(int argc, char **argv)
{
    PGconn *conn;
    conn = PQconnectdb("dbname=mydb");
    if(PQstatus(conn) != CONNECTION_OK)
    {
        fprintf(stderr, "connection failed: %s\n", PQerrorMessage(conn));
        PQfinish(conn);
        return 1;
    }
    
    char* q = "SELECT * from mytable;";
    PGresult *res = PQexec(conn, q);
    if(PQresultStatus(res) != PGRES_TUPLES_OK)
    {
        fprintf(stderr, "comamnd failed: %s\n", PQerrorMessage(conn));
        PQfinish(conn);
        return 1;
    }

    PQclear(res);
    PQfinish(conn);

    return 0;
}

I compiled it using this command: gcc test.c -lpq
Then I ran it through valgrind 3.5.0 using:
valgrind --tool=memcheck --leak-check=full ./a.out

This is the summary from valgrind on the problem server.
==22234== HEAP SUMMARY:
==22234==     in use at exit: 292 bytes in 11 blocks
==22234==   total heap usage: 122 allocs, 112 frees, 51,747 bytes allocated
==22234== 
==22234== 292 (52 direct, 240 indirect) bytes in 1 blocks are definitely lost 
in loss record 11 of 11
==22234==    at 0x4C260AE: malloc (vg_replace_malloc.c:195)
==22234==    by 0x5130C4C: nss_parse_service_list (in /lib64/libc-2.12.1.so)
==22234==    by 0x5131425: __nss_database_lookup (in /lib64/libc-2.12.1.so)
==22234==    by 0x641536F: ???
==22234==    by 0x6415FB4: ???
==22234==    by 0x50EFF4C: getpwuid_r@@GLIBC_2.2.5 (in /lib64/libc-2.12.1.so)
==22234==    by 0x50EF83E: getpwuid (in /lib64/libc-2.12.1.so)
==22234==    by 0x4E46708: pqGetpwuid (in 
/usr/lib64/postgresql-8.1/lib64/libpq.so.4.1)
==22234==    by 0x4E354D6: pg_fe_getauthname (in 
/usr/lib64/postgresql-8.1/lib64/libpq.so.4.1)
==22234==    by 0x4E37CF9: conninfo_parse (in 
/usr/lib64/postgresql-8.1/lib64/libpq.so.4.1)
==22234==    by 0x4E37DD7: connectOptions1 (in 
/usr/lib64/postgresql-8.1/lib64/libpq.so.4.1)
==22234==    by 0x4E389C0: PQconnectStart (in 
/usr/lib64/postgresql-8.1/lib64/libpq.so.4.1)
==22234== 
==22234== LEAK SUMMARY:
==22234==    definitely lost: 52 bytes in 1 blocks
==22234==    indirectly lost: 240 bytes in 10 blocks
==22234==      possibly lost: 0 bytes in 0 blocks
==22234==    still reachable: 0 bytes in 0 blocks
==22234==         suppressed: 0 bytes in 0 blocks
==22234== 
==22234== For counts of detected and suppressed errors, rerun with: -v
==22234== Use --track-origins=yes to see where uninitialised values come from
==22234== ERROR SUMMARY: 255 errors from 76 contexts (suppressed: 6 from 6)

These are the first two errors from valgrind.  If more are needed, I can send 
them.
==22234== Invalid read of size 8
==22234==    at 0x515EE03: __strcmp_ssse3 (in /lib64/libc-2.12.1.so)
==22234==    by 0x4E377D4: conninfo_parse (in 
/usr/lib64/postgresql-8.1/lib64/libpq.so.4.1)
==22234==    by 0x4E37DD7: connectOptions1 (in 
/usr/lib64/postgresql-8.1/lib64/libpq.so.4.1)
==22234==    by 0x4E389C0: PQconnectStart (in 
/usr/lib64/postgresql-8.1/lib64/libpq.so.4.1)
==22234==    by 0x4E38A05: PQconnectdb (in 
/usr/lib64/postgresql-8.1/lib64/libpq.so.4.1)
==22234==    by 0x40097C: main (in /home/casey/a.out)
==22234==  Address 0x601baa8 is 8 bytes inside a block of size 12 alloc'd
==22234==    at 0x4C260AE: malloc (vg_replace_malloc.c:195)
==22234==    by 0x50CBB41: strdup (in /lib64/libc-2.12.1.so)
==22234==    by 0x4E3766B: conninfo_parse (in 
/usr/lib64/postgresql-8.1/lib64/libpq.so.4.1)
==22234==    by 0x4E37DD7: connectOptions1 (in 
/usr/lib64/postgresql-8.1/lib64/libpq.so.4.1)
==22234==    by 0x4E389C0: PQconnectStart (in 
/usr/lib64/postgresql-8.1/lib64/libpq.so.4.1)
==22234==    by 0x4E38A05: PQconnectdb (in 
/usr/lib64/postgresql-8.1/lib64/libpq.so.4.1)
==22234==    by 0x40097C: main (in /home/casey/a.out)
==22234== 
==22234== Invalid read of size 8
==22234==    at 0x515FA54: __strcmp_ssse3 (in /lib64/libc-2.12.1.so)
==22234==    by 0x4E377D4: conninfo_parse (in 
/usr/lib64/postgresql-8.1/lib64/libpq.so.4.1)
==22234==    by 0x4E37DD7: connectOptions1 (in 
/usr/lib64/postgresql-8.1/lib64/libpq.so.4.1)
==22234==    by 0x4E389C0: PQconnectStart (in 
/usr/lib64/postgresql-8.1/lib64/libpq.so.4.1)
==22234==    by 0x4E38A05: PQconnectdb (in 
/usr/lib64/postgresql-8.1/lib64/libpq.so.4.1)
==22234==    by 0x40097C: main (in /home/casey/a.out)
==22234==  Address 0x601baa8 is 8 bytes inside a block of size 12 alloc'd
==22234==    at 0x4C260AE: malloc (vg_replace_malloc.c:195)
==22234==    by 0x50CBB41: strdup (in /lib64/libc-2.12.1.so)
==22234==    by 0x4E3766B: conninfo_parse (in 
/usr/lib64/postgresql-8.1/lib64/libpq.so.4.1)
==22234==    by 0x4E37DD7: connectOptions1 (in 
/usr/lib64/postgresql-8.1/lib64/libpq.so.4.1)
==22234==    by 0x4E389C0: PQconnectStart (in 
/usr/lib64/postgresql-8.1/lib64/libpq.so.4.1)
==22234==    by 0x4E38A05: PQconnectdb (in 
/usr/lib64/postgresql-8.1/lib64/libpq.so.4.1)
==22234==    by 0x40097C: main (in /home/casey/a.out)

This is what I get from valgrind on my production server (CentOS 5.4 with 
postgresql 8.1.21)
==21941== HEAP SUMMARY:
==21941==     in use at exit: 0 bytes in 0 blocks
==21941==   total heap usage: 240 allocs, 240 frees, 65,725 bytes allocated
==21941== 
==21941== All heap blocks were freed -- no leaks are possible
==21941== 
==21941== For counts of detected and suppressed errors, rerun with: -v
==21941== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 49 from 10)


My Gentoo machine's setup
AMD64
Linux 2.6.35.4
gcc 4.4.4
glibc 2.12.1
postgresql 8.1.21

Thanks

-- 
Casey Jones

-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux