I found one small required fix:
self->pgconn needs to be set as NULL
after PQfinish(self->pgconn) on line 3117.
Otherwise there comes a double free problem later.
self->pgconn = PQconnectdb(conninfo);
if (PQstatus(self->pgconn) != CONNECTION_OK)
{
CC_set_error(self,CONNECTION_COULD_NOT_ESTABLISH,PQerrorMessage(self->pgconn));
mylog("could not establish connection to the database %s
\n",PQerrorMessage(self->pgconn));
PQfinish(self->pgconn);
self->pgconn = NULL; //THIS IS THE FIX, THAT IS NEEDED TO AVOID
THE DOUBLE free().
free(conninfo);
return 0;
}
Marko Ristola
Dave Page wrote:
>Thanks, I've applied a patch to fix this. Iirc, exit_nicely() is used in
>the libpq examples in the PostgreSQL manual :-)
>
>/D
>
>
>
>>-----Original Message-----
>>From: pgsql-odbc-owner@postgresql.org
>>[mailto:pgsql-odbc-owner@postgresql.org] On Behalf Of Marko Ristola
>>Sent: 20 July 2005 12:23
>>To: pgsql-odbc@postgresql.org
>>Subject: [ODBC] psqlodbc libpq version: quiet error on connect failure
>>
>>
>>Problem
>>
>>psqlodbc, with libpq enabled, will do exit(1), if connecting into the
>>database fails.
>>A good fix seems to be to remove the exit_nicely() function call.
>>
>>----------------------
>>static void
>>exit_nicely(PGconn *conn)
>>{
>> PQfinish(conn);
>> exit(1);
>>}
>>----------------------
>>
>>Connect code:
>>
>> self->pgconn = PQconnectdb(conninfo);
>> if (PQstatus(self->pgconn) != CONNECTION_OK)
>> {
>>
>>CC_set_error(self,CONNECTION_COULD_NOT_ESTABLISH,PQerrorMessag
>>e(self->pgconn));
>> mylog("could not establish connection to the database %s
>>\n",PQerrorMessage(self->pgconn));
>> exit_nicely(self->pgconn);
>> free(conninfo);
>> return 0;
>> }
>>
>>------------------------
>>
>>Marko Ristola
>>
>>
>>---------------------------(end of
>>broadcast)---------------------------
>>TIP 5: don't forget to increase your free space map settings
>>
>>
>>
>
>---------------------------(end of broadcast)---------------------------
>TIP 4: Have you searched our list archives?
>
> http://archives.postgresql.org
>
>