async problems? - Mailing list pgsql-general
From | Mark Harrison |
---|---|
Subject | async problems? |
Date | |
Msg-id | 40BD08DF.7030001@pixar.com Whole thread Raw |
Responses |
Re: async problems?
|
List | pgsql-general |
Here is a test program which dies in the postgres runtime. I've simplified the code as much as I can, and I cannot see where I'm doing anything wrong. Has anybody had success with async mode? Am I doing something wrong here? Or are there some problems with async operation that I don't know about? (the larger program does this in an event loop... this non-event loop program exhibits the same behavior.) Many TIA, Mark #include <stdio.h> #include <stdlib.h> #include "libpq-fe.h" char fetchstr[] = "FETCH 100 in cur"; int main() { PGconn* conn; PGresult *res; int rc; int tot = 0; int ntuples; conn = PQconnectdb("host=planb dbname=planb"); printf("PQconnectdb %d\n", PQstatus(conn)); rc = PQsetnonblocking(conn, 1); printf("PQsetnonblocking %d\n", rc); res = PQexec(conn, "BEGIN"); printf("PQexec begin %s\n", PQresStatus(PQresultStatus(res))); PQclear(res); res = PQexec(conn,"DECLARE cur CURSOR FOR select * from assets limit 8888"); printf("PQexec declare %s\n", PQresStatus(PQresultStatus(res))); PQclear(res); rc = PQsendQuery(conn, fetchstr); printf("PQsendQuery %d\n", rc); PQclear(res); PQflush(conn); while (1) { res = PQgetResult(conn); printf("tot=%d res=%p\n", tot, res); if (res == NULL) { rc = PQsendQuery(conn, fetchstr); printf("PQsendQuery %d\n", rc); PQflush(conn); } else { ntuples = PQntuples(res); tot += ntuples; if (ntuples == 0) { printf("done: tot=%d\n", tot); res = PQexec(conn, "CLOSE cur"); printf("PQexec close %s\n", PQresStatus(PQresultStatus(res))); PQclear(res); res = PQexec(conn, "END"); printf("PQexec end %s\n", PQresStatus(PQresultStatus(res))); PQclear(res); PQfinish(conn); exit(0); } PQclear(res); } } } #0 chunk_alloc (ar_ptr=0x40178a00, nb=2056) at malloc.c:2983 #1 0x400c4108 in __libc_malloc (bytes=2048) at malloc.c:2811 #2 0x40021063 in pqResultAlloc (res=0x8053928, nBytes=6, isBinary=0 '\0') at fe-exec.c:271 #3 0x4002b1fb in getAnotherTuple (conn=0x8049e50, msgLength=21) at fe-protocol3.c:530 #4 0x4002a9e9 in pqParseInput3 (conn=0x8049e50) at fe-protocol3.c:271 #5 0x400221fe in parseInput (conn=0x8049e50) at fe-exec.c:998 #6 0x4002231c in PQgetResult (conn=0x8049e50) at fe-exec.c:1072 #7 0x080489bb in main () at n6.c:37 #8 0x40060627 in __libc_start_main (main=0x8048850 <main>, argc=1, ubp_av=0xbfffdee4, init=0x8048618 <_init>, fini=0x8048b70 <_fini>, rtld_fini=0x4000dcd4 <_dl_fini>, stack_end=0xbfffdedc) at ../sysdeps/generic/libc-start.c:129
pgsql-general by date: