Re: psqlodbc libpq version: quiet error on connect failure

From: Marko Ristola <Marko(dot)Ristola(at)kolumbus(dot)fi>
To: Dave Page <dpage(at)vale-housing(dot)co(dot)uk>
Cc: pgsql-odbc(at)postgresql(dot)org
Subject: Re: psqlodbc libpq version: quiet error on connect failure
Date: 2005-07-20 13:22:16
Message-ID: 42DE5008.3090105@kolumbus.fi
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-odbc


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(at)postgresql(dot)org
>>[mailto:pgsql-odbc-owner(at)postgresql(dot)org] On Behalf Of Marko Ristola
>>Sent: 20 July 2005 12:23
>>To: pgsql-odbc(at)postgresql(dot)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
>
>

In response to

Browse pgsql-odbc by date

  From Date Subject
Next Message Dave Page 2005-07-20 14:50:43 Re: psqlodbc libpq version: quiet error on connect failure
Previous Message Dave Page 2005-07-20 11:55:47 Re: psqlodbc libpq version: quiet error on connect failure