Re: psqlodbc libpq version: quiet error on connect failure

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

Thanks, fix applied.

/D

> -----Original Message-----
> From: Marko Ristola [mailto:Marko(dot)Ristola(at)kolumbus(dot)fi]
> Sent: 20 July 2005 14:22
> To: Dave Page
> Cc: pgsql-odbc(at)postgresql(dot)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(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
> >
> >
>
>

Browse pgsql-odbc by date

  From Date Subject
Next Message lothar.behrens 2005-07-20 16:54:11 Best way of retrieving tablename from a query ?
Previous Message Marko Ristola 2005-07-20 13:22:16 Re: psqlodbc libpq version: quiet error on connect failure