This is an automated email from the ASF dual-hosted git repository.

huajianlan pushed a commit to branch fe_local_shuffle
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 4a875420efdfd662e3ed991aab6f32c96d7873ee
Author: 924060929 <[email protected]>
AuthorDate: Thu Mar 26 17:21:11 2026 +0800

    [fix](build) fix macOS BE startup crash caused by fd_number overflow
    
    On macOS, getrlimit(RLIMIT_NOFILE) can return RLIM_INFINITY (INT64_MAX).
    The calculation fd_number / 100 * segment_cache_fd_percentage produces
    1844674407370955160, which overflows cast_set<uint32_t> in SegmentCache
    constructor, crashing BE on startup. Linux kernels cap this via fs.nr_open
    (default 1M), so only macOS is affected.
    
    Fix: cap fd_number on macOS before the segment cache capacity calculation.
---
 be/src/runtime/exec_env_init.cpp | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/be/src/runtime/exec_env_init.cpp b/be/src/runtime/exec_env_init.cpp
index 3b46ca53cb5..7f5341bd0ba 100644
--- a/be/src/runtime/exec_env_init.cpp
+++ b/be/src/runtime/exec_env_init.cpp
@@ -602,6 +602,17 @@ Status ExecEnv::init_mem_env() {
     } else {
         fd_number = static_cast<uint64_t>(l.rlim_cur);
     }
+#ifdef __APPLE__
+    // On macOS, rlim_cur can be RLIM_INFINITY (INT64_MAX), which causes
+    // fd_number / 100 * percentage to overflow and crash cast_set<uint32_t>.
+    // Linux kernels cap this via fs.nr_open (default 1M), so only macOS needs 
this.
+    {
+        constexpr uint64_t max_fd = UINT32_MAX >> 2;
+        if (fd_number > max_fd) {
+            fd_number = max_fd;
+        }
+    }
+#endif
 
     int64_t segment_cache_capacity = 0;
     if (config::is_cloud_mode()) {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to