mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-06-21 15:44:59 +02:00
1a2523e901
735b25519asupport: clamp RLIMIT_MEMLOCK to size_t (Sjors Provoost)8ab4b9fc85init: clamp fd limits to int (Sjors Provoost)4afbabdcefFix startup failure with RLIM_INFINITY fd limits (Sjors Provoost) Pull request description: When setting the fd limit to unlimited, the node fails to start: ```sh ulimit -n unlimited build/bin/bitcoind Error: Not enough file descriptors available. -1 available, 160 required. ``` This was caused by `RaiseFileDescriptorLimit()` (introduced in #2568) casting `limitFD.rlim_cur` to `int`, which for `RLIM_INFINITY` overflows to `-1`. Fix it by returning `std::numeric_limits<int>::max()` instead. Some platforms implement `RLIM_INFINITY` as the maximum uint64, others as int64 (-1). So simply changing the return type to `uint64_t` wouldn't work. Similarly, though unlikely to actually happen: ```sh ulimit -n 214748364 build/bin/bitcoind Error: Not enough file descriptors available. -2147483648 available, 160 required. ``` The second commit expands the fix by clamping all values above `std::numeric_limits<int>::max()` instead of letting them overflow. This PR also expands `test/functional/feature_init.py` to cover these, using `resource.setrlimit`. The check is skipped on environments with a hard limit below infinity (or that don't have the Python [Resource module](https://docs.python.org/3/library/resource.html)). macOS by default has a hard limit of infinity, but on e.g. Ubuntu the default hard limit is 524288. The third commit applies a similar fix to `PosixLockedPageAllocator::GetLimit()` for 32-bit systems, but without a test. ACKs for top commit: winterrdog: Re-ACK735b25519aachow101: ACK735b25519asedited: Re-ACK735b25519apinheadmz: ACK735b25519aTree-SHA512: 0ce0292ecd61456bdec6943b06cbb9ecfc5180ee6dce850f8496ef54af22c1fae6ea473085202f5ba6f72e4dc51a29247620c9a0eae31e96658adc77b293129f