1*4882a593SmuzhiyunFrom ef08d0dbc99db8c4620512e92bfb3154282eb5d3 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Andrew Morrow <acm@mongodb.com> 3*4882a593SmuzhiyunDate: Wed, 15 Sep 2021 15:23:42 -0400 4*4882a593SmuzhiyunSubject: [PATCH] SERVER-59459 With glibc-2.34, MINSIGSTKSZ is no longer a 5*4882a593Smuzhiyun constant 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun[Retrieved (and backported) from: 8*4882a593Smuzhiyunhttps://github.com/mongodb/mongo/commit/ef08d0dbc99db8c4620512e92bfb3154282eb5d3] 9*4882a593SmuzhiyunSigned-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> 10*4882a593Smuzhiyun--- 11*4882a593Smuzhiyun src/mongo/stdx/thread.h | 14 ++++++++++---- 12*4882a593Smuzhiyun 1 file changed, 10 insertions(+), 4 deletions(-) 13*4882a593Smuzhiyun 14*4882a593Smuzhiyundiff --git a/src/mongo/stdx/thread.h b/src/mongo/stdx/thread.h 15*4882a593Smuzhiyunindex 7b15bb561bd9..6f1e16cdeb36 100644 16*4882a593Smuzhiyun--- a/src/mongo/stdx/thread.h 17*4882a593Smuzhiyun+++ b/src/mongo/stdx/thread.h 18*4882a593Smuzhiyun@@ -76,11 +76,19 @@ class SigAltStackController { 19*4882a593Smuzhiyun } 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun private: 22*4882a593Smuzhiyun+ static size_t _getStackSize() { 23*4882a593Smuzhiyun+ // It would be nice for this to be a constexpr, but 24*4882a593Smuzhiyun+ // MINSIGSTKSZ became a macro that invoked `sysconf` in glibc 25*4882a593Smuzhiyun+ // 2.34. 26*4882a593Smuzhiyun+ static const std::size_t kMinSigStkSz = MINSIGSTKSZ; 27*4882a593Smuzhiyun+ return std::max(kMongoMinSignalStackSize, kMinSigStkSz); 28*4882a593Smuzhiyun+ } 29*4882a593Smuzhiyun+ 30*4882a593Smuzhiyun void _install() const { 31*4882a593Smuzhiyun stack_t ss; 32*4882a593Smuzhiyun ss.ss_sp = _stackStorage.get(); 33*4882a593Smuzhiyun ss.ss_flags = 0; 34*4882a593Smuzhiyun- ss.ss_size = kStackSize; 35*4882a593Smuzhiyun+ ss.ss_size = _getStackSize(); 36*4882a593Smuzhiyun if (sigaltstack(&ss, nullptr)) { 37*4882a593Smuzhiyun abort(); 38*4882a593Smuzhiyun } 39*4882a593Smuzhiyun@@ -107,9 +115,7 @@ class SigAltStackController { 40*4882a593Smuzhiyun // ( https://jira.mongodb.org/secure/attachment/233569/233569_stacktrace-writeup.txt ) 41*4882a593Smuzhiyun static constexpr std::size_t kMongoMinSignalStackSize = std::size_t{64} << 10; 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun- static constexpr std::size_t kStackSize = 44*4882a593Smuzhiyun- std::max(kMongoMinSignalStackSize, std::size_t{MINSIGSTKSZ}); 45*4882a593Smuzhiyun- std::unique_ptr<std::byte[]> _stackStorage = std::make_unique<std::byte[]>(kStackSize); 46*4882a593Smuzhiyun+ std::unique_ptr<std::byte[]> _stackStorage = std::make_unique<std::byte[]>(_getStackSize()); 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun #else // !MONGO_HAS_SIGALTSTACK 49*4882a593Smuzhiyun auto makeInstallGuard() const { 50