aboutsummaryrefslogtreecommitdiff
path: root/src
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 /src
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.
Diffstat (limited to 'src')
-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;
+ }
}