$NetBSD: patch-src_3rdparty_chromium_ui_base_x_x11__shm__image__pool.cc,v 1.2 2022/04/18 11:18:19 adam Exp $ --- src/3rdparty/chromium/ui/base/x/x11_shm_image_pool.cc.orig 2021-02-19 16:41:59.000000000 +0000 +++ src/3rdparty/chromium/ui/base/x/x11_shm_image_pool.cc @@ -16,6 +16,7 @@ #include "base/environment.h" #include "base/location.h" #include "base/strings/string_util.h" +#include "base/system/sys_info.h" #include "base/threading/thread_task_runner_handle.h" #include "build/build_config.h" #include "net/base/url_util.h" @@ -45,10 +46,14 @@ constexpr float kShmResizeShrinkThreshol 1.0f / (kShmResizeThreshold * kShmResizeThreshold); std::size_t MaxShmSegmentSizeImpl() { +#if defined(OS_BSD) + return base::SysInfo::MaxSharedMemorySize(); +#else struct shminfo info; if (shmctl(0, IPC_INFO, reinterpret_cast(&info)) == -1) return 0; return info.shmmax; +#endif } std::size_t MaxShmSegmentSize() { @@ -190,7 +195,7 @@ bool XShmImagePool::Resize(const gfx::Si shmctl(state.shmid, IPC_RMID, nullptr); return false; } -#if defined(OS_LINUX) || defined(OS_CHROMEOS) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD) // On Linux, a shmid can still be attached after IPC_RMID if otherwise // kept alive. Detach before XShmAttach to prevent a memory leak in case // the process dies. @@ -209,7 +214,7 @@ bool XShmImagePool::Resize(const gfx::Si return false; state.shmseg = shmseg; state.shmem_attached_to_server = true; -#if !defined(OS_LINUX) && !defined(OS_CHROMEOS) +#if !defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_BSD) // The Linux-specific shmctl behavior above may not be portable, so we're // forced to do IPC_RMID after the server has attached to the segment. shmctl(state.shmid, IPC_RMID, nullptr);