aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2000-05-26 01:26:19 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2000-05-26 01:26:19 +0000
commit2af53f3762513e397177d9b13dcfdbba7effc7a0 (patch)
tree3fc0a0b43e627d237b8b58e34fb765625e21ecf4
parent39725e56e8a1271b2ba01c25aa0babf729f1f372 (diff)
downloadpostgresql-2af53f3762513e397177d9b13dcfdbba7effc7a0.tar.gz
postgresql-2af53f3762513e397177d9b13dcfdbba7effc7a0.zip
After closing frontend socket, set MyProcPort->sock = -1 to ensure that
subsequent I/O attempts fail cleanly. I'm speculating about failure scenarios in which we do pq_close, then something in a proc_exit routine opens a file (re-using that kernel FD number), then something else fails and tries to write an elog message to the frontend ... message ends up in opened file, oops. No known examples of this but it seems like a potential hole.
-rw-r--r--src/backend/libpq/pqcomm.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c
index aec4f34c7d2..a7d757066e8 100644
--- a/src/backend/libpq/pqcomm.c
+++ b/src/backend/libpq/pqcomm.c
@@ -29,7 +29,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: pqcomm.c,v 1.91 2000/05/21 21:19:53 tgl Exp $
+ * $Id: pqcomm.c,v 1.92 2000/05/26 01:26:19 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -144,7 +144,11 @@ void
pq_close(void)
{
if (MyProcPort != NULL)
+ {
close(MyProcPort->sock);
+ /* make sure any subsequent attempts to do I/O fail cleanly */
+ MyProcPort->sock = -1;
+ }
}