Re: psqlodbc libpq version: quiet error on connect failure

Поиск
Список
Период
Сортировка
От Dave Page
Тема Re: psqlodbc libpq version: quiet error on connect failure
Дата
Msg-id E7F85A1B5FF8D44C8A1AF6885BC9A0E4AC93C7@ratbert.vale-housing.co.uk
обсуждение исходный текст
Ответ на psqlodbc libpq version: quiet error on connect failure  (Marko Ristola <Marko.Ristola@kolumbus.fi>)
Список pgsql-odbc
Thanks, fix applied.

/D

> -----Original Message-----
> From: Marko Ristola [mailto:Marko.Ristola@kolumbus.fi]
> Sent: 20 July 2005 14:22
> To: Dave Page
> Cc: pgsql-odbc@postgresql.org
> Subject: Re: [ODBC] psqlodbc libpq version: quiet error on
> connect failure
>
>
> 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,PQerrorMessag
> e(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 по дате отправления:

Предыдущее
От: Marko Ristola
Дата:
Сообщение: Re: psqlodbc libpq version: quiet error on connect failure
Следующее
От: lothar.behrens@lollisoft.de
Дата:
Сообщение: Best way of retrieving tablename from a query ?