PQsetdbLogin bug? - Mailing list pgsql-hackers

From Tatsuo Ishii
Subject PQsetdbLogin bug?
Date
Msg-id 20010525221239F.t-ishii@sra.co.jp
Whole thread Raw
Responses Re: PQsetdbLogin bug?  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
Sometimes PQfinish() does not return forever in the following program.

conn = PQsetdbLogin();
if(PQstatus(conn) == CONNECTION_BAD)
{ PQfinish(conn);    /* blocks here */
}

PQfinish calls closePGconn that call pqPuts. pqPuts calls select(2)
and it never returns if a connection associated with the socket is not
established.

This could happend if the connection is not established, but the
socket is still opened by PQsetdbLogin. Possible fixes are:

1) close the socket in PQsetdbLogin if it is in a situation being  returns CONNECTION_BAD
    case PGRES_POLLING_WRITING:        if (pqWait(0, 1, conn))        {            conn->status = CONNECTION_BAD;
    close(conn->sock); <-- add this            conn->sock == -1;  <-- add this            return 0;        }
break;


2) check if the status of handle returned PQsetdbLogin is  CONNECTION_BAD closePGconn. if so, do not call pqPuts (and
pqFlush)
  change this:if (conn->sock >= 0)
  to:if (conn->status != CONNECTION_BAD && conn->sock >= 0)

any thoughts?
--
Tatsuo Ishii




pgsql-hackers by date:

Previous
From: "Oliver Elphick"
Date:
Subject: Bug#98643: plpgsql SELECT INTO causes trouble when assignment impossible (fwd)
Next
From: Tom Lane
Date:
Subject: Re: GiST index on data types that require compression