From 8b58d18a5a7a01887efdad85d9fa08e6c88e9a2f Mon Sep 17 00:00:00 2001 From: winlin Date: Sat, 8 May 2021 11:25:48 +0800 Subject: [PATCH] Refine init of global objects --- trunk/src/app/srs_app_pithy_print.cpp | 2 +- trunk/src/app/srs_app_rtc_server.cpp | 6 ++-- trunk/src/app/srs_app_rtc_source.cpp | 9 ++---- trunk/src/app/srs_app_source.cpp | 15 +++------- trunk/src/app/srs_app_threads.cpp | 40 +++++++++++++++++++++++-- trunk/src/kernel/srs_kernel_rtc_rtp.cpp | 10 +++---- 6 files changed, 53 insertions(+), 29 deletions(-) diff --git a/trunk/src/app/srs_app_pithy_print.cpp b/trunk/src/app/srs_app_pithy_print.cpp index 40c1a9b4b..75bd95be5 100644 --- a/trunk/src/app/srs_app_pithy_print.cpp +++ b/trunk/src/app/srs_app_pithy_print.cpp @@ -166,7 +166,7 @@ bool SrsErrorPithyPrint::can_print(int error_code, uint32_t* pnn) } // The global stage manager for pithy print, multiple stages. -static SrsStageManager* _srs_stages = new SrsStageManager(); +SrsStageManager* _srs_stages = NULL; SrsPithyPrint::SrsPithyPrint(int _stage_id) { diff --git a/trunk/src/app/srs_app_rtc_server.cpp b/trunk/src/app/srs_app_rtc_server.cpp index 335bfe722..c71e94b8f 100644 --- a/trunk/src/app/srs_app_rtc_server.cpp +++ b/trunk/src/app/srs_app_rtc_server.cpp @@ -132,10 +132,10 @@ void SrsRtcBlackhole::sendto(void* data, int len) srs_sendto(blackhole_stfd, data, len, (sockaddr*)blackhole_addr, sizeof(sockaddr_in), SRS_UTIME_NO_TIMEOUT); } -SrsRtcBlackhole* _srs_blackhole = new SrsRtcBlackhole(); +SrsRtcBlackhole* _srs_blackhole = NULL; // @global dtls certficate for rtc module. -SrsDtlsCertificate* _srs_rtc_dtls_certificate = new SrsDtlsCertificate(); +SrsDtlsCertificate* _srs_rtc_dtls_certificate = NULL; // TODO: Should support error response. // For STUN packet, 0x00 is binding request, 0x01 is binding success response. @@ -777,5 +777,5 @@ void RtcServerAdapter::stop() { } -SrsResourceManager* _srs_rtc_manager = new SrsResourceManager("RTC", true); +SrsResourceManager* _srs_rtc_manager = NULL; diff --git a/trunk/src/app/srs_app_rtc_source.cpp b/trunk/src/app/srs_app_rtc_source.cpp index a2ff017c4..de2be5499 100644 --- a/trunk/src/app/srs_app_rtc_source.cpp +++ b/trunk/src/app/srs_app_rtc_source.cpp @@ -249,7 +249,7 @@ void SrsRtcConsumer::on_stream_change(SrsRtcStreamDescription* desc) SrsRtcStreamManager::SrsRtcStreamManager() { - lock = NULL; + lock = srs_mutex_new(); } SrsRtcStreamManager::~SrsRtcStreamManager() @@ -261,11 +261,6 @@ srs_error_t SrsRtcStreamManager::fetch_or_create(SrsRequest* r, SrsRtcStream** p { srs_error_t err = srs_success; - // Lazy create lock, because ST is not ready in SrsRtcStreamManager constructor. - if (!lock) { - lock = srs_mutex_new(); - } - // Use lock to protect coroutine switch. // @bug https://github.com/ossrs/srs/issues/1230 SrsLocker(lock); @@ -315,7 +310,7 @@ SrsRtcStream* SrsRtcStreamManager::fetch(SrsRequest* r) return source; } -SrsRtcStreamManager* _srs_rtc_sources = new SrsRtcStreamManager(); +SrsRtcStreamManager* _srs_rtc_sources = NULL; ISrsRtcPublishStream::ISrsRtcPublishStream() { diff --git a/trunk/src/app/srs_app_source.cpp b/trunk/src/app/srs_app_source.cpp index ce09e6614..5f0ce3313 100755 --- a/trunk/src/app/srs_app_source.cpp +++ b/trunk/src/app/srs_app_source.cpp @@ -1684,17 +1684,18 @@ srs_error_t SrsMetaCache::update_vsh(SrsSharedPtrMessage* msg) return vformat->on_video(msg); } -SrsSourceManager* _srs_sources = new SrsSourceManager(); +SrsSourceManager* _srs_sources = NULL; SrsSourceManager::SrsSourceManager() { - lock = NULL; - timer_ = NULL; + lock = srs_mutex_new(); + timer_ = new SrsHourGlass("sources", this, 1 * SRS_UTIME_SECONDS); } SrsSourceManager::~SrsSourceManager() { srs_mutex_destroy(lock); + srs_freep(timer_); } srs_error_t SrsSourceManager::initialize() @@ -1706,11 +1707,6 @@ srs_error_t SrsSourceManager::fetch_or_create(SrsRequest* r, ISrsSourceHandler* { srs_error_t err = srs_success; - // Lazy create lock, because ST is not ready in SrsSourceManager constructor. - if (!lock) { - lock = srs_mutex_new(); - } - // Use lock to protect coroutine switch. // @bug https://github.com/ossrs/srs/issues/1230 // TODO: FIXME: Use smaller lock. @@ -1778,9 +1774,6 @@ srs_error_t SrsSourceManager::setup_ticks() { srs_error_t err = srs_success; - srs_freep(timer_); - timer_ = new SrsHourGlass("sources", this, 1 * SRS_UTIME_SECONDS); - if ((err = timer_->tick(1, 1 * SRS_UTIME_SECONDS)) != srs_success) { return srs_error_wrap(err, "tick"); } diff --git a/trunk/src/app/srs_app_threads.cpp b/trunk/src/app/srs_app_threads.cpp index fabaff593..014e7ecad 100644 --- a/trunk/src/app/srs_app_threads.cpp +++ b/trunk/src/app/srs_app_threads.cpp @@ -27,10 +27,30 @@ #include #include #include +#include +#include +#include +#include +#include +#include #include using namespace std; +extern SrsStageManager* _srs_stages; +extern SrsRtcBlackhole* _srs_blackhole; +extern SrsResourceManager* _srs_rtc_manager; + +extern SrsRtpObjectCacheManager* _srs_rtp_cache; +extern SrsRtpObjectCacheManager* _srs_rtp_raw_cache; +extern SrsRtpObjectCacheManager* _srs_rtp_fua_cache; + +extern SrsRtpObjectCacheManager* _srs_rtp_msg_cache_buffers; +extern SrsRtpObjectCacheManager* _srs_rtp_msg_cache_objs; + +extern SrsResourceManager* _srs_rtc_manager; +extern SrsDtlsCertificate* _srs_rtc_dtls_certificate; + #include extern SrsPps* _srs_pps_snack2; @@ -249,7 +269,7 @@ srs_error_t SrsCircuitBreaker::on_timer(srs_utime_t interval) return err; } -SrsCircuitBreaker* _srs_circuit_breaker = new SrsCircuitBreaker(); +SrsCircuitBreaker* _srs_circuit_breaker = NULL; srs_error_t srs_thread_initialize() { @@ -267,8 +287,24 @@ srs_error_t srs_thread_initialize() return srs_error_wrap(err, "initialize st failed"); } - // The global hybrid server. + // The global objects which depends on ST. _srs_hybrid = new SrsHybridServer(); + _srs_rtc_sources = new SrsRtcStreamManager(); + _srs_sources = new SrsSourceManager(); + _srs_stages = new SrsStageManager(); + _srs_blackhole = new SrsRtcBlackhole(); + _srs_rtc_manager = new SrsResourceManager("RTC", true); + _srs_circuit_breaker = new SrsCircuitBreaker(); + + _srs_rtp_cache = new SrsRtpObjectCacheManager(sizeof(SrsRtpPacket2)); + _srs_rtp_raw_cache = new SrsRtpObjectCacheManager(sizeof(SrsRtpRawPayload)); + _srs_rtp_fua_cache = new SrsRtpObjectCacheManager(sizeof(SrsRtpFUAPayload2)); + + _srs_rtp_msg_cache_buffers = new SrsRtpObjectCacheManager(sizeof(SrsSharedPtrMessage) + kRtpPacketSize); + _srs_rtp_msg_cache_objs = new SrsRtpObjectCacheManager(sizeof(SrsSharedPtrMessage)); + + _srs_rtc_manager = new SrsResourceManager("RTC", true); + _srs_rtc_dtls_certificate = new SrsDtlsCertificate(); // Initialize global pps, which depends on _srs_clock _srs_pps_ids = new SrsPps(); diff --git a/trunk/src/kernel/srs_kernel_rtc_rtp.cpp b/trunk/src/kernel/srs_kernel_rtc_rtp.cpp index ef5b840fb..bbe2c6f2c 100644 --- a/trunk/src/kernel/srs_kernel_rtc_rtp.cpp +++ b/trunk/src/kernel/srs_kernel_rtc_rtp.cpp @@ -1081,12 +1081,12 @@ bool SrsRtpPacket2::is_keyframe() return false; } -SrsRtpObjectCacheManager* _srs_rtp_cache = new SrsRtpObjectCacheManager(sizeof(SrsRtpPacket2)); -SrsRtpObjectCacheManager* _srs_rtp_raw_cache = new SrsRtpObjectCacheManager(sizeof(SrsRtpRawPayload)); -SrsRtpObjectCacheManager* _srs_rtp_fua_cache = new SrsRtpObjectCacheManager(sizeof(SrsRtpFUAPayload2)); +SrsRtpObjectCacheManager* _srs_rtp_cache = NULL; +SrsRtpObjectCacheManager* _srs_rtp_raw_cache = NULL; +SrsRtpObjectCacheManager* _srs_rtp_fua_cache = NULL; -SrsRtpObjectCacheManager* _srs_rtp_msg_cache_buffers = new SrsRtpObjectCacheManager(sizeof(SrsSharedPtrMessage) + kRtpPacketSize); -SrsRtpObjectCacheManager* _srs_rtp_msg_cache_objs = new SrsRtpObjectCacheManager(sizeof(SrsSharedPtrMessage)); +SrsRtpObjectCacheManager* _srs_rtp_msg_cache_buffers = NULL; +SrsRtpObjectCacheManager* _srs_rtp_msg_cache_objs = NULL; SrsRtpRawPayload::SrsRtpRawPayload() {