From 9b871fd862d67106e94a9d8f097a31a81d2b1913 Mon Sep 17 00:00:00 2001 From: Jacob Su Date: Thu, 14 Aug 2025 20:55:27 +0800 Subject: [PATCH] Fix: Remove redundant enabled checks in HLS/DASH cleanup to prevent resource leaks. v6.0.173 v7.0.54 (#4161) ## Problem HLS and DASH components had redundant `enabled` flag checks in their `cycle()` and `cleanup_delay()` methods that prevented proper cleanup of files when components were disabled. This created a race condition where: 1. Stream stops publishing and HLS/DASH components get disabled 2. `cycle()` returns early without performing disposal operations 3. `cleanup_delay()` returns 0 instead of configured disposal timeout 4. Source cleanup doesn't wait long enough for file disposal 5. HLS/DASH files remain on disk without proper cleanup ## Root Cause The `enabled` flag should control processing of **new incoming streams**, but should NOT prevent **cleanup of existing files** from previously enabled streams. ## Solution Remove redundant `enabled` checks from: - `SrsHls::cycle()` and `SrsDash::cycle()` - Allow disposal logic to run even when disabled - `SrsHls::cleanup_delay()` and `SrsDash::cleanup_delay()` - Always return proper disposal timeout --------- Co-authored-by: winlin --- trunk/doc/CHANGELOG.md | 2 ++ trunk/src/app/srs_app_dash.cpp | 8 -------- trunk/src/app/srs_app_hls.cpp | 8 -------- trunk/src/core/srs_core_version6.hpp | 2 +- trunk/src/core/srs_core_version7.hpp | 2 +- 5 files changed, 4 insertions(+), 18 deletions(-) diff --git a/trunk/doc/CHANGELOG.md b/trunk/doc/CHANGELOG.md index 2b156d4ca..338d45665 100644 --- a/trunk/doc/CHANGELOG.md +++ b/trunk/doc/CHANGELOG.md @@ -7,6 +7,7 @@ The changelog for SRS. ## SRS 7.0 Changelog +* v7.0, 2025-08-14, Merge [#4161](https://github.com/ossrs/srs/pull/4161): fix hls & dash segments cleanup. v7.0.54 (#4161) * v7.0, 2025-08-13, Merge [#4225](https://github.com/ossrs/srs/pull/4225): issue #4223: remove hls_acodec and hls_vcodec config. v7.0.53 (#4225) * v7.0, 2025-08-12, Merge [#4230](https://github.com/ossrs/srs/pull/4230): MP4 DVR: Fix audio/video synchronization issues in WebRTC recordings. v7.0.52 (#4230) * v7.0, 2025-08-12, Merge [#4301](https://github.com/ossrs/srs/pull/4301): Valgrind: Return error for unsupported check=new on Valgrind < 3.21. v7.0.52 (#4301) @@ -67,6 +68,7 @@ The changelog for SRS. ## SRS 6.0 Changelog +* v6.0, 2025-08-14, Merge [#4161](https://github.com/ossrs/srs/pull/4161): fix hls & dash segments cleanup. v6.0.173 (#4161) * v6.0, 2025-08-12, Merge [#4230](https://github.com/ossrs/srs/pull/4230): MP4 DVR: Fix audio/video synchronization issues in WebRTC recordings. v6.0.172 (#4230) * v6.0, 2025-08-11, Merge [#4432](https://github.com/ossrs/srs/pull/4432): AI: HTTP-FLV: Fix heap-use-after-free crash during stream unmount. v6.0.171 (#4432) * v6.0, 2025-07-28, Merge [#4245](https://github.com/ossrs/srs/pull/4245): Allow Forward to be configured with Env Var. v6.0.170 (#4245) diff --git a/trunk/src/app/srs_app_dash.cpp b/trunk/src/app/srs_app_dash.cpp index cca6d89a5..74e368117 100644 --- a/trunk/src/app/srs_app_dash.cpp +++ b/trunk/src/app/srs_app_dash.cpp @@ -703,10 +703,6 @@ srs_error_t SrsDash::cycle() { srs_error_t err = srs_success; - if (!enabled) { - return err; - } - if (last_update_time_ <= 0) { last_update_time_ = srs_get_system_time(); } @@ -737,10 +733,6 @@ srs_error_t SrsDash::cycle() srs_utime_t SrsDash::cleanup_delay() { - if (!enabled) { - return 0; - } - // We use larger timeout to cleanup the HLS, after disposed it if required. return _srs_config->get_dash_dispose(req->vhost) * 1.1; } diff --git a/trunk/src/app/srs_app_hls.cpp b/trunk/src/app/srs_app_hls.cpp index d848aa15d..8de16f60f 100644 --- a/trunk/src/app/srs_app_hls.cpp +++ b/trunk/src/app/srs_app_hls.cpp @@ -2320,10 +2320,6 @@ srs_error_t SrsHls::cycle() { srs_error_t err = srs_success; - if (!enabled) { - return err; - } - if (last_update_time <= 0) { last_update_time = srs_get_system_time(); } @@ -2363,10 +2359,6 @@ srs_error_t SrsHls::cycle() srs_utime_t SrsHls::cleanup_delay() { - if (!enabled) { - return 0; - } - // We use larger timeout to cleanup the HLS, after disposed it if required. return _srs_config->get_hls_dispose(req->vhost) * 1.1; } diff --git a/trunk/src/core/srs_core_version6.hpp b/trunk/src/core/srs_core_version6.hpp index 89a09a264..47b66a86f 100644 --- a/trunk/src/core/srs_core_version6.hpp +++ b/trunk/src/core/srs_core_version6.hpp @@ -9,6 +9,6 @@ #define VERSION_MAJOR 6 #define VERSION_MINOR 0 -#define VERSION_REVISION 172 +#define VERSION_REVISION 173 #endif diff --git a/trunk/src/core/srs_core_version7.hpp b/trunk/src/core/srs_core_version7.hpp index dd8707010..447b5cda1 100644 --- a/trunk/src/core/srs_core_version7.hpp +++ b/trunk/src/core/srs_core_version7.hpp @@ -9,6 +9,6 @@ #define VERSION_MAJOR 7 #define VERSION_MINOR 0 -#define VERSION_REVISION 53 +#define VERSION_REVISION 54 #endif \ No newline at end of file