Re: psqlodbc libpq version: quiet error on connect failure - Mailing list pgsql-odbc

From Marko Ristola
Subject Re: psqlodbc libpq version: quiet error on connect failure
Date
Msg-id 42DE5008.3090105@kolumbus.fi
Whole thread Raw
In response to Re: psqlodbc libpq version: quiet error on connect failure  ("Dave Page" <dpage@vale-housing.co.uk>)
List 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@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
>
>


pgsql-odbc by date:

Previous
From: "Dave Page"
Date:
Subject: Re: psqlodbc libpq version: quiet error on connect failure
Next
From: "Dave Page"
Date:
Subject: Re: psqlodbc libpq version: quiet error on connect failure