diff options
| author | Garrett D'Amore <garrett@damore.org> | 2024-12-22 16:10:47 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2024-12-22 16:10:47 -0800 |
| commit | 1aeddc63fdde9d67359214b7a800509351a4d17f (patch) | |
| tree | 3306560d280739bebb11cade488a4f907e2f1799 | |
| parent | a24b4f11799806e08638162901039fd23efe48be (diff) | |
| download | nng-1aeddc63fdde9d67359214b7a800509351a4d17f.tar.gz nng-1aeddc63fdde9d67359214b7a800509351a4d17f.tar.bz2 nng-1aeddc63fdde9d67359214b7a800509351a4d17f.zip | |
poll: sign extension bug + incorrect use leads to tiny max files on macOS
| -rw-r--r-- | src/platform/posix/posix_pollq_poll.c | 16 |
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) || |
