From a461817ade4b77110f95db6b5f7dd6e8aa8254b9 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 10 Nov 2021 15:27:35 +0100 Subject: Merge pull request #2934 from toonn/cross-platform-test test: Make CApi test cross-platform --- test/unit/test_c_api.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/test/unit/test_c_api.cpp b/test/unit/test_c_api.cpp index d416457b..9c1329a7 100644 --- a/test/unit/test_c_api.cpp +++ b/test/unit/test_c_api.cpp @@ -47,6 +47,10 @@ #include +#if !defined(_WIN32) +#include +#endif + #ifndef __MINGW32__ #include #endif @@ -6104,9 +6108,18 @@ TEST_F(CApi, open_plenty_of_contexts) { // database std::vector dummyFilePointers; std::vector ctxts; - // 1024 is the number of file descriptors that can be opened simultaneously - // by a Linux process (by default) - for (int i = 0; i < 1024 - 50; i++) { + // The number of file descriptors that can be opened simultaneously by a + // process varies across platforms so we make use of getrlimit(2) to + // retrieve it. + struct rlimit open_max; + getrlimit(RLIMIT_NOFILE, &open_max); + // On some platforms fopen returned nullptrs before reaching limit - 50, we + // can avoid this by capping the limit to 1024. + if (open_max.rlim_cur > 1024) { + open_max.rlim_cur = 1024; + setrlimit(RLIMIT_NOFILE, &open_max); + } + for (rlim_t i = 0; i < open_max.rlim_cur - 50; i++) { FILE *f = fopen("/dev/null", "rb"); ASSERT_TRUE(f != nullptr); dummyFilePointers.push_back(f); -- cgit v1.2.3