From 31e191e9e3f923b0ac110ab873e6443869c3d406 Mon Sep 17 00:00:00 2001 From: winlin Date: Mon, 13 Oct 2025 10:00:51 -0400 Subject: [PATCH] Init ST after daemon started. --- trunk/src/app/srs_app_server.cpp | 11 +++++------ trunk/src/main/srs_main_server.cpp | 16 ++++++++++++---- trunk/src/protocol/srs_protocol_log.cpp | 12 ++++++++++++ 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/trunk/src/app/srs_app_server.cpp b/trunk/src/app/srs_app_server.cpp index 0bbd675ab..0b3d873e6 100644 --- a/trunk/src/app/srs_app_server.cpp +++ b/trunk/src/app/srs_app_server.cpp @@ -78,14 +78,10 @@ extern std::string _srs_reload_id; extern SrsRtcBlackhole *_srs_blackhole; extern SrsDtlsCertificate *_srs_rtc_dtls_certificate; +bool _srs_global_initialized = false; srs_error_t srs_global_initialize() { - srs_error_t err = srs_success; - - // Root global objects. - _srs_log = new SrsFileLog(); - _srs_context = new SrsThreadContext(); - _srs_config = new SrsConfig(); + srs_error_t err = srs_success; // Initialize the global kbps statistics variables if ((err = srs_global_kbps_initialize()) != srs_success) { @@ -140,6 +136,9 @@ srs_error_t srs_global_initialize() SrsRand rand; _srs_reload_id = rand.gen_str(7); + // Global initialization done + _srs_global_initialized = true; + return err; } diff --git a/trunk/src/main/srs_main_server.cpp b/trunk/src/main/srs_main_server.cpp index 620791858..b94b1323c 100644 --- a/trunk/src/main/srs_main_server.cpp +++ b/trunk/src/main/srs_main_server.cpp @@ -96,10 +96,10 @@ srs_error_t do_main(int argc, char **argv, char **envp) } #endif - // Initialize global and thread-local variables. - if ((err = srs_global_initialize()) != srs_success) { - return srs_error_wrap(err, "global init"); - } + // Root global objects, should be created before any other global objects. + _srs_log = new SrsFileLog(); + _srs_context = new SrsThreadContext(); + _srs_config = new SrsConfig(); // For background context id. _srs_context->set_id(_srs_context->generate_id()); @@ -451,6 +451,14 @@ srs_error_t run_srs_server() { srs_error_t err = srs_success; + // Initialize global and thread-local variables. + if ((err = srs_global_initialize()) != srs_success) { + return srs_error_wrap(err, "global init"); + } + + // For primordial thread, share the default cid. + _srs_context->set_id(_srs_context->get_id()); + _srs_server = new SrsServer(); // Do some system initialize. diff --git a/trunk/src/protocol/srs_protocol_log.cpp b/trunk/src/protocol/srs_protocol_log.cpp index 2f96d4e36..5ac480bfd 100644 --- a/trunk/src/protocol/srs_protocol_log.cpp +++ b/trunk/src/protocol/srs_protocol_log.cpp @@ -46,8 +46,14 @@ void _srs_context_destructor(void *arg) srs_freep(cid); } +extern bool _srs_global_initialized; + const SrsContextId &SrsThreadContext::get_id() { + if (!_srs_global_initialized) { + return _srs_context_default; + } + ++_srs_pps_cids_get->sugar_; if (!srs_thread_self()) { @@ -71,8 +77,14 @@ void SrsThreadContext::clear_cid() { } +extern bool _srs_global_initialized; const SrsContextId &srs_context_set_cid_of(srs_thread_t trd, const SrsContextId &v) { + if (!_srs_global_initialized) { + _srs_context_default = v; + return v; + } + ++_srs_pps_cids_set->sugar_; if (!trd) {