diff options
author | Andres Freund <andres@anarazel.de> | 2024-11-26 12:20:59 -0500 |
---|---|---|
committer | Andres Freund <andres@anarazel.de> | 2024-11-26 12:44:47 -0500 |
commit | b8f9afc81f26ead612fcfe76301c01d110e36c7e (patch) | |
tree | 483af5541cd54af136a65f431a97ff7169ee93dd | |
parent | 4ee130c6e03becefae94e66bf537cd1279823c68 (diff) | |
download | postgresql-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.c | 10 |
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) { |