aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndres Freund <andres@anarazel.de>2024-11-26 12:20:59 -0500
committerAndres Freund <andres@anarazel.de>2024-11-26 12:44:47 -0500
commitb8f9afc81f26ead612fcfe76301c01d110e36c7e (patch)
tree483af5541cd54af136a65f431a97ff7169ee93dd
parent4ee130c6e03becefae94e66bf537cd1279823c68 (diff)
downloadpostgresql-b8f9afc81f26ead612fcfe76301c01d110e36c7e.tar.gz
postgresql-b8f9afc81f26ead612fcfe76301c01d110e36c7e.zip
Distinguish between AcquireExternalFD and epoll_create1 / kqueue failing
The error messages in CreateWaitEventSet() made it hard to know whether the syscall or AcquireExternalFD() failed. This is particularly relevant because AcquireExternalFD() imposes a lower limit than what would cause syscalls fail with EMFILE. I did not change the message in libpqsrv_connect_prepare(), which is the one other use of AcquireExternalFD() in our codebase, as the error message already is less ambiguous. Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://postgr.es/m/xjjx7r4xa7beixuu4qtkdhnwdbchrrpo3gaeb3jsbinvvdiat5@cwjw55mna5of
-rw-r--r--src/backend/storage/ipc/latch.c10
1 files changed, 2 insertions, 8 deletions
diff --git a/src/backend/storage/ipc/latch.c b/src/backend/storage/ipc/latch.c
index 608eb66abed..f19ce5e7aff 100644
--- a/src/backend/storage/ipc/latch.c
+++ b/src/backend/storage/ipc/latch.c
@@ -811,10 +811,7 @@ CreateWaitEventSet(ResourceOwner resowner, int nevents)
#if defined(WAIT_USE_EPOLL)
if (!AcquireExternalFD())
- {
- /* treat this as though epoll_create1 itself returned EMFILE */
- elog(ERROR, "epoll_create1 failed: %m");
- }
+ elog(ERROR, "AcquireExternalFD, for epoll_create1, failed: %m");
set->epoll_fd = epoll_create1(EPOLL_CLOEXEC);
if (set->epoll_fd < 0)
{
@@ -823,10 +820,7 @@ CreateWaitEventSet(ResourceOwner resowner, int nevents)
}
#elif defined(WAIT_USE_KQUEUE)
if (!AcquireExternalFD())
- {
- /* treat this as though kqueue itself returned EMFILE */
- elog(ERROR, "kqueue failed: %m");
- }
+ elog(ERROR, "AcquireExternalFD, for kqueue, failed: %m");
set->kqueue_fd = kqueue();
if (set->kqueue_fd < 0)
{