diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2000-05-26 01:26:19 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2000-05-26 01:26:19 +0000 |
commit | 2af53f3762513e397177d9b13dcfdbba7effc7a0 (patch) | |
tree | 3fc0a0b43e627d237b8b58e34fb765625e21ecf4 /src | |
parent | 39725e56e8a1271b2ba01c25aa0babf729f1f372 (diff) | |
download | postgresql-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.c | 6 |
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; + } } |