Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit f8c5317

Browse filesBrowse files
committed
Disconnect if socket cannot be put into non-blocking mode
Commit 387da18 moved the code to put socket into non-blocking mode from socket_set_nonblocking() into the one-time initialization function, pq_init(). In socket_set_nonblocking(), there indeed was a risk of recursion on failure like the comment said, but in pq_init(), ERROR or FATAL is fine. There's even another elog(FATAL) just after this, if setting FD_CLOEXEC fails. Note that COMMERROR merely logged the error, it did not close the connection, so if putting the socket to non-blocking mode failed we would use the connection anyway. You might not immediately notice, because most socket operations in a regular backend wait for the socket to become readable/writable anyway. But e.g. replication will be quite broken. Backpatch to all supported versions. Discussion: https://www.postgresql.org/message-id/d40a5cd0-2722-40c5-8755-12e9e811fa3c@iki.fi
1 parent 4dec98c commit f8c5317
Copy full SHA for f8c5317

File tree

Expand file treeCollapse file tree

1 file changed

+1
-5
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+1
-5
lines changed

‎src/backend/libpq/pqcomm.c

Copy file name to clipboardExpand all lines: src/backend/libpq/pqcomm.c
+1-5Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -189,14 +189,10 @@ pq_init(void)
189189
* nonblocking mode and use latches to implement blocking semantics if
190190
* needed. That allows us to provide safely interruptible reads and
191191
* writes.
192-
*
193-
* Use COMMERROR on failure, because ERROR would try to send the error to
194-
* the client, which might require changing the mode again, leading to
195-
* infinite recursion.
196192
*/
197193
#ifndef WIN32
198194
if (!pg_set_noblock(MyProcPort->sock))
199-
ereport(COMMERROR,
195+
ereport(FATAL,
200196
(errmsg("could not set socket to nonblocking mode: %m")));
201197
#endif
202198

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.