diff --git a/src/applications/bmqbrkr/m_bmqbrkr_task.cpp b/src/applications/bmqbrkr/m_bmqbrkr_task.cpp index ea8fb712f8..f7205645ea 100644 --- a/src/applications/bmqbrkr/m_bmqbrkr_task.cpp +++ b/src/applications/bmqbrkr/m_bmqbrkr_task.cpp @@ -279,12 +279,10 @@ int Task::initialize(bsl::ostream& errorDescription) return rc_SCHEDULER_START_FAILED; // RETURN } - if (bmqsys::ThreadUtil::k_SUPPORT_THREAD_NAME) { - d_scheduler.scheduleEvent( - bsls::TimeInterval(0, 0), // now - bdlf::BindUtil::bind(&bmqsys::ThreadUtil::setCurrentThreadName, - "bmqSchedTask")); - } + d_scheduler.scheduleEvent( + bsls::TimeInterval(0, 0), // now + bdlf::BindUtil::bind(&bmqsys::ThreadUtil::setCurrentThreadName, + "bmqSchedTask")); // ------------- // LogController @@ -344,10 +342,7 @@ int Task::initialize(bsl::ostream& errorDescription) return rc_CONTROLCHANNEL_START_FAILED; // RETURN } - if (bmqsys::ThreadUtil::k_SUPPORT_THREAD_NAME) { - bdls::PipeUtil::send(pipePath, - bsl::string(k_MTRAP_SET_THREADNAME) + "\n"); - } + bdls::PipeUtil::send(pipePath, bsl::string(k_MTRAP_SET_THREADNAME) + "\n"); // ------------------- // M-Trap registration diff --git a/src/groups/bmq/bmqimp/bmqimp_brokersession.cpp b/src/groups/bmq/bmqimp/bmqimp_brokersession.cpp index 835614901b..14883fd00c 100644 --- a/src/groups/bmq/bmqimp/bmqimp_brokersession.cpp +++ b/src/groups/bmq/bmqimp/bmqimp_brokersession.cpp @@ -5850,9 +5850,7 @@ void BrokerSession::setChannel(const bsl::shared_ptr& channel) { // executed by the *IO* thread - if (bmqsys::ThreadUtil::k_SUPPORT_THREAD_NAME) { - bmqsys::ThreadUtil::setCurrentThreadNameOnce("bmqTCPIO"); - } + bmqsys::ThreadUtil::setCurrentThreadNameOnce("bmqTCPIO"); if (channel) { // We are now connected to bmqbrkr BALL_LOG_INFO << "Channel is CREATED [host: " << channel->peerUri() diff --git a/src/groups/bmq/bmqsys/bmqsys_threadutil.cpp b/src/groups/bmq/bmqsys/bmqsys_threadutil.cpp index 4270271baa..a4e01e3392 100644 --- a/src/groups/bmq/bmqsys/bmqsys_threadutil.cpp +++ b/src/groups/bmq/bmqsys/bmqsys_threadutil.cpp @@ -26,15 +26,11 @@ #include #include #include +#include #include #include #include -// Linux -#if defined(BSLS_PLATFORM_OS_LINUX) -#include -#endif - namespace BloombergLP { namespace bmqsys { @@ -52,23 +48,9 @@ bslmt::ThreadAttributes ThreadUtil::defaultAttributes() return attributes; } -// LINUX -// ----- -#if defined(BSLS_PLATFORM_OS_LINUX) - -const bool ThreadUtil::k_SUPPORT_THREAD_NAME = true; - void ThreadUtil::setCurrentThreadName(const bsl::string& value) { - int rc = prctl(PR_SET_NAME, value.c_str(), 0, 0, 0); - // We should use 'modern' APIs: pthread_setname_no(pthread_self()). But - // Bloomberg is a bit old; API was added in glibc 2.12, and we have 2.5. - if (rc != 0) { - BALL_LOG_SET_CATEGORY(k_LOG_CATEGORY); - BALL_LOG_ERROR << "Failed to set thread name " << "[name: '" << value - << "'" << ", rc: " << rc << ", strerr: '" - << bsl::strerror(rc) << "']"; - } + bslmt::ThreadUtil::setThreadName(value); } void ThreadUtil::setCurrentThreadNameOnce(const bsl::string& value) @@ -87,27 +69,5 @@ void ThreadUtil::setCurrentThreadNameOnce(const bsl::string& value) } } -// UNSUPPORTED_PLATFORMS -// --------------------- -#else - -const bool ThreadUtil::k_SUPPORT_THREAD_NAME = false; - -void ThreadUtil::setCurrentThreadName( - BSLS_ANNOTATION_UNUSED const bsl::string& value) -{ - // NOT AVAILABLE - - static_cast(k_LOG_CATEGORY); // suppress unused variable warning -} - -void ThreadUtil::setCurrentThreadNameOnce( - BSLS_ANNOTATION_UNUSED const bsl::string& value) -{ - // NOT AVAILABLE -} - -#endif - } // close package namespace } // close enterprise namespace diff --git a/src/groups/bmq/bmqsys/bmqsys_threadutil.h b/src/groups/bmq/bmqsys/bmqsys_threadutil.h index d097a0e3cf..3c507cd789 100644 --- a/src/groups/bmq/bmqsys/bmqsys_threadutil.h +++ b/src/groups/bmq/bmqsys/bmqsys_threadutil.h @@ -47,34 +47,28 @@ namespace bmqsys { /// Utility namespace for thread management struct ThreadUtil { - // CONSTANTS - - /// Boolean constant indicating whether the current platform supports - /// naming thread. - static const bool k_SUPPORT_THREAD_NAME; - // CLASS METHODS /// Return `bslmt::ThreadAttributes` object pre-initialized with default /// thread parameter values set for the local operating system. static bslmt::ThreadAttributes defaultAttributes(); - /// Set the name of the current thread to the specified `value`. This - /// method is a no-op if `k_SUPPORT_THREAD_NAME` is false. + /// Set the name of the current thread to the specified `value`, truncated + /// to a length of 15 bytes. /// /// PLATFORM NOTE: - /// - this functionality is only supported on LINUX, and the name can - /// be up to 15 characters. + /// - On platforms other than Linux, Solaris, Darwin, and Windows, this + /// method has no effect. static void setCurrentThreadName(const bsl::string& value); - /// Set the name of the current thread to the specified `value`. This - /// method is a no-op if `k_SUPPORT_THREAD_NAME` is false. Unlike - /// `setCurrentThreadName`, this method uses a thread local variable to - /// ensure this is done only once per thread. + /// Set the name of the current thread to the specified `value`, truncated + /// to a length of 15 bytes. Unlike `setCurrentThreadName`, this method + /// uses a thread local variable to ensure this is done only once per + /// thread. /// /// PLATFORM NOTE: - /// - this functionality is only supported on LINUX, and the name can - /// be up to 15 characters. + /// - On platforms other than Linux, Solaris, Darwin, and Windows, this + /// method has no effect. static void setCurrentThreadNameOnce(const bsl::string& value); }; diff --git a/src/groups/mqb/mqba/mqba_dispatcher.cpp b/src/groups/mqb/mqba/mqba_dispatcher.cpp index 2d4b00986b..f9560e53e2 100644 --- a/src/groups/mqb/mqba/mqba_dispatcher.cpp +++ b/src/groups/mqb/mqba/mqba_dispatcher.cpp @@ -522,17 +522,15 @@ int Dispatcher::start(bsl::ostream& errorDescription) return rc; // RETURN } - if (bmqsys::ThreadUtil::k_SUPPORT_THREAD_NAME) { - execute(bdlf::BindUtil::bind(&bmqsys::ThreadUtil::setCurrentThreadName, - "bmqDispSession"), - mqbi::DispatcherClientType::e_SESSION); - execute(bdlf::BindUtil::bind(&bmqsys::ThreadUtil::setCurrentThreadName, - "bmqDispQueue"), - mqbi::DispatcherClientType::e_QUEUE); - execute(bdlf::BindUtil::bind(&bmqsys::ThreadUtil::setCurrentThreadName, - "bmqDispCluster"), - mqbi::DispatcherClientType::e_CLUSTER); - } + execute(bdlf::BindUtil::bind(&bmqsys::ThreadUtil::setCurrentThreadName, + "bmqDispSession"), + mqbi::DispatcherClientType::e_SESSION); + execute(bdlf::BindUtil::bind(&bmqsys::ThreadUtil::setCurrentThreadName, + "bmqDispQueue"), + mqbi::DispatcherClientType::e_QUEUE); + execute(bdlf::BindUtil::bind(&bmqsys::ThreadUtil::setCurrentThreadName, + "bmqDispCluster"), + mqbi::DispatcherClientType::e_CLUSTER); d_isStarted = true; diff --git a/src/groups/mqb/mqbnet/mqbnet_elector.cpp b/src/groups/mqb/mqbnet/mqbnet_elector.cpp index 9d25d1f64a..8f0b6722b6 100644 --- a/src/groups/mqb/mqbnet/mqbnet_elector.cpp +++ b/src/groups/mqb/mqbnet/mqbnet_elector.cpp @@ -2234,15 +2234,13 @@ Elector::Elector(mqbcfg::ElectorConfig& config, d_state.setTerm(initialTerm); - if (bmqsys::ThreadUtil::k_SUPPORT_THREAD_NAME) { - // Per scheduler's contract, it's ok to schedule events before its - // started. + // Per scheduler's contract, it's ok to schedule events before its + // started. - d_scheduler.scheduleEvent( - bsls::TimeInterval(0, 0), // now - bdlf::BindUtil::bind(&bmqsys::ThreadUtil::setCurrentThreadName, - "bmqSchedElec")); - } + d_scheduler.scheduleEvent( + bsls::TimeInterval(0, 0), // now + bdlf::BindUtil::bind(&bmqsys::ThreadUtil::setCurrentThreadName, + "bmqSchedElec")); } Elector::~Elector() diff --git a/src/groups/mqb/mqbnet/mqbnet_tcpsessionfactory.cpp b/src/groups/mqb/mqbnet/mqbnet_tcpsessionfactory.cpp index 2220e5c9b4..2e7498f8dd 100644 --- a/src/groups/mqb/mqbnet/mqbnet_tcpsessionfactory.cpp +++ b/src/groups/mqb/mqbnet/mqbnet_tcpsessionfactory.cpp @@ -656,9 +656,7 @@ void TCPSessionFactory::channelStateCallback( // This is an infrequent enough operation (compared to a 'readCb') that it // is fine to do this here (since we have no other ways to // proactively-execute code in the IO threads created by the channelPool). - if (bmqsys::ThreadUtil::k_SUPPORT_THREAD_NAME) { - bmqsys::ThreadUtil::setCurrentThreadNameOnce(d_threadName); - } + bmqsys::ThreadUtil::setCurrentThreadNameOnce(d_threadName); BALL_LOG_TRACE << "TCPSessionFactory '" << d_config.name() << "': channelStateCallback [event: " << event diff --git a/src/groups/mqb/mqbstat/mqbstat_statcontroller.cpp b/src/groups/mqb/mqbstat/mqbstat_statcontroller.cpp index 97677494b7..7614879863 100644 --- a/src/groups/mqb/mqbstat/mqbstat_statcontroller.cpp +++ b/src/groups/mqb/mqbstat/mqbstat_statcontroller.cpp @@ -725,12 +725,10 @@ int StatController::start(bsl::ostream& errorDescription) return -2; // RETURN } - if (bmqsys::ThreadUtil::k_SUPPORT_THREAD_NAME) { - d_scheduler_mp->scheduleEvent( - bsls::TimeInterval(0), // execute as soon as possible - bdlf::BindUtil::bind(&bmqsys::ThreadUtil::setCurrentThreadName, - "bmqSchedStat")); - } + d_scheduler_mp->scheduleEvent( + bsls::TimeInterval(0), // execute as soon as possible + bdlf::BindUtil::bind(&bmqsys::ThreadUtil::setCurrentThreadName, + "bmqSchedStat")); // Create and start the system stat monitor. The SystemStats are used in // the dashboard screen, stat consumers, stats printer, ... So we need to