From b8f9afc81f26ead612fcfe76301c01d110e36c7e Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Tue, 26 Nov 2024 12:20:59 -0500 Subject: [PATCH] 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 Discussion: https://postgr.es/m/xjjx7r4xa7beixuu4qtkdhnwdbchrrpo3gaeb3jsbinvvdiat5@cwjw55mna5of --- src/backend/storage/ipc/latch.c | 10 ++-------- 1 file 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) { -- 2.30.2