By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
438,834 Members | 2,240 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 438,834 IT Pros & Developers. It's quick & easy.

PGexec dumps core at pqResultAlloc

P: n/a
Hi All,
I'm trying to write a Postgres database plugin in an application of mine.
The rest of the app is written in C++, but I'm NOT interested in using
libpqxx at this time. This plugin will be dynamically loaded, and other
plugins I've written seem to work just fine.

The problem appears to be in my second call to the connection pointer. The
first select statement I made works just fine (though no rows are returned),
but the second time I try to run a select statement, I get a core. Running
multiple queries in psql work perfectly. Here's the stacktrace form my dump:

#0 0x408cf47e in malloc_consolidate () from /lib/libc.so.6
#1 0x408ced83 in _int_malloc () from /lib/libc.so.6
#2 0x408cdf1a in malloc () from /lib/libc.so.6
#3 0x40c834cd in pqResultAlloc (res=0x4098a9a0, nBytes=1083746720,
isBinary=1 '\001') at fe-exec.c:496
#4 0x40c83e18 in getRowDescriptions (conn=0x80699b8) at fe-exec.c:1129
#5 0x40c83d5f in parseInput (conn= x80699b8) at fe-exec.c:1023
#6 0x40c8437b in PQgetResult (conn=0x80699b8) at fe-exec.c:1349
#7 0x40c84489 in PQexec (conn=0x80699b8, query=0x8070398 "select * from
accounts where ID!=0") at fe-exec.c:1461

The code is pretty basic, in my opinion. The following is the snippet that's
failling. By the time execution gets to this point, the connection is open,
and the first line always prints 0 1 0
---
cout<<conn<<": "<<PQstatus( conn )<<" "<<CONNECTION_BAD<<"
"<<CONNECTION_OK<<endl;

PGresult * result=PQexec( conn, "BEGIN" );
cout<<"here a"<<endl;
PQclear( result );

cout<<"here a.1"<<endl;
result=PQexec( conn, stmt );
cout<<"here a.2"<<endl;
--

Platform: Slackware Linux 9.1, x86, gcc-3.2.3

I would appreciate any help I can get at this point. It looks like someone
had a similar issue back in 1998, but I can't imagine this is the same
error. Thanks for your help,

ry
---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

Nov 12 '05 #1
Share this Question
Share on Google+
2 Replies


P: n/a
ljb
ry**@ostrich-emulators.com wrote:
...
#0 0x408cf47e in malloc_consolidate () from /lib/libc.so.6
#1 0x408ced83 in _int_malloc () from /lib/libc.so.6
#2 0x408cdf1a in malloc () from /lib/libc.so.6
#3 0x40c834cd in pqResultAlloc (res=0x4098a9a0, nBytes=1083746720,
isBinary=1 '\001') at fe-exec.c:496
#4 0x40c83e18 in getRowDescriptions (conn=0x80699b8) at fe-exec.c:1129
#5 0x40c83d5f in parseInput (conn= x80699b8) at fe-exec.c:1023
#6 0x40c8437b in PQgetResult (conn=0x80699b8) at fe-exec.c:1349
#7 0x40c84489 in PQexec (conn=0x80699b8, query=0x8070398 "select * from
accounts where ID!=0") at fe-exec.c:1461

The code is pretty basic, in my opinion. The following is the snippet that's
failling. By the time execution gets to this point, the connection is open,
and the first line always prints 0 1 0
---
cout<<conn<<": "<<PQstatus( conn )<<" "<<CONNECTION_BAD<<"
"<<CONNECTION_OK<<endl;

PGresult * result=PQexec( conn, "BEGIN" );
cout<<"here a"<<endl;
PQclear( result );

cout<<"here a.1"<<endl;
result=PQexec( conn, stmt );
cout<<"here a.2"<<endl;
--

Platform: Slackware Linux 9.1, x86, gcc-3.2.3


If you aren't getting answers it's not because nobody looked at this. I
did, and I can't figure it out. You are apparently running 7.3.x based on
the code line numbers. The only way pqResultAlloc could be asked to
allocate 1,083,746,720 bytes there would be if you had a table with
67,734,170 columns which is impossible - the protocol simply doesn't allow
it. Sorry this doesn't help, but either your PostgreSQL server is returning
garbage for the RowDescription message, or something else is badly awry in
your program.
Nov 12 '05 #2

P: n/a
ljb wrote:
ry**@ostrich-emulators.com wrote:

...
#0 0x408cf47e in malloc_consolidate () from /lib/libc.so.6
#1 0x408ced83 in _int_malloc () from /lib/libc.so.6
#2 0x408cdf1a in malloc () from /lib/libc.so.6
#3 0x40c834cd in pqResultAlloc (res=0x4098a9a0, nBytes=1083746720,
isBinary=1 '\001') at fe-exec.c:496
#4 0x40c83e18 in getRowDescriptions (conn=0x80699b8) at fe-exec.c:1129
#5 0x40c83d5f in parseInput (conn= x80699b8) at fe-exec.c:1023
#6 0x40c8437b in PQgetResult (conn=0x80699b8) at fe-exec.c:1349
#7 0x40c84489 in PQexec (conn=0x80699b8, query=0x8070398 "select * from
accounts where ID!=0") at fe-exec.c:1461

The code is pretty basic, in my opinion. The following is the snippet that's
failling. By the time execution gets to this point, the connection is open,
and the first line always prints 0 1 0
---
cout<<conn<<": "<<PQstatus( conn )<<" "<<CONNECTION_BAD<<"
"<<CONNECTION_OK<<endl;

PGresult * result=PQexec( conn, "BEGIN" );
cout<<"here a"<<endl;
PQclear( result );

cout<<"here a.1"<<endl;
result=PQexec( conn, stmt );
cout<<"here a.2"<<endl;
--

Platform: Slackware Linux 9.1, x86, gcc-3.2.3


If you aren't getting answers it's not because nobody looked at this. I
did, and I can't figure it out. You are apparently running 7.3.x based on

Same here..:-)

I had a thought yesterday but didn't put it because was not sure how
helpful it is... anyways..

Are your postgresql include headers are within a extern "C" block? In
C++, that can cause quite a grief. Check it out..

Shridhar

Nov 12 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.