aboutsummaryrefslogtreecommitdiff
path: root/src/platform
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2024-12-22 16:10:47 -0800
committerGarrett D'Amore <garrett@damore.org>2024-12-22 16:10:47 -0800
commit1aeddc63fdde9d67359214b7a800509351a4d17f (patch)
tree3306560d280739bebb11cade488a4f907e2f1799 /src/platform
parenta24b4f11799806e08638162901039fd23efe48be (diff)
downloadnng-1aeddc63fdde9d67359214b7a800509351a4d17f.tar.gz
nng-1aeddc63fdde9d67359214b7a800509351a4d17f.tar.bz2
nng-1aeddc63fdde9d67359214b7a800509351a4d17f.zip
poll: sign extension bug + incorrect use leads to tiny max files on macOS
Diffstat (limited to 'src/platform')
-rw-r--r--src/platform/posix/posix_pollq_poll.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/platform/posix/posix_pollq_poll.c b/src/platform/posix/posix_pollq_poll.c
index 1da1f5df..e5b095ff 100644
--- a/src/platform/posix/posix_pollq_poll.c
+++ b/src/platform/posix/posix_pollq_poll.c
@@ -44,7 +44,7 @@ typedef struct nni_posix_pollq {
nni_list addq; // list of nodes to add, protected by mtx
struct pollfd *fds;
nni_posix_pfd **pfds;
- int nalloc;
+ unsigned nalloc;
bool closed;
} nni_posix_pollq;
@@ -307,12 +307,13 @@ nni_posix_pollq_create(nni_posix_pollq *pq)
struct rlimit limits;
pq->nalloc = 0;
if (getrlimit(RLIMIT_NOFILE, &limits) == 0) {
- if (limits.rlim_cur != RLIM_INFINITY) {
- pq->nalloc = (int) limits.rlim_cur;
- } else if (limits.rlim_max != RLIM_INFINITY) {
- pq->nalloc = (int) limits.rlim_max;
+ if (limits.rlim_cur != RLIM_INFINITY &&
+ limits.rlim_cur < 1U << 20) {
+ pq->nalloc = (unsigned) limits.rlim_cur;
+ } else if (limits.rlim_max != RLIM_INFINITY &&
+ limits.rlim_max < 1U << 20) {
+ pq->nalloc = (unsigned) limits.rlim_max;
}
- pq->nalloc = (int) limits.rlim_max;
}
#endif
if (pq->nalloc == 0) {
@@ -320,7 +321,8 @@ nni_posix_pollq_create(nni_posix_pollq *pq)
// rlimit properly, or
pq->nalloc = 5000;
}
- if (pq->nalloc < 20) { // minimum allowed per POSIX
+ if (pq->nalloc < 128) { // 20 is minimum allowed per POSIX, but we need
+ // more for testing
pq->nalloc = 20;
}
if (((pq->pfds = NNI_ALLOC_STRUCTS(pq->pfds, pq->nalloc)) == NULL) ||