srs/trunk
Winlin c762e8204a
AI: HTTP-FLV: Fix heap-use-after-free crash during stream unmount. v6.0.171 v7.0.50 (#4432)
## Summary
Fixes a critical heap-use-after-free crash in HTTP-FLV streaming that
occurs when a client requests a stream while it's being unmounted
asynchronously.

## Problem
- **Issue**: #4429 - Heap-use-after-free crash in
`SrsLiveStream::serve_http()`
- **Root Cause**: Race condition between coroutines in single-threaded
SRS server:
1. **Coroutine A**: HTTP client requests FLV stream → `serve_http()`
starts
2. **Coroutine B**: RTMP publisher disconnects → triggers async stream
destruction
3. **Async Worker**: Destroys `SrsLiveStream` object while Coroutine A
is yielded
  4. **Coroutine A**: Resumes and accesses freed memory → **CRASH**

## Solution
1. **Early viewer registration**: Add HTTP connection to `viewers_` list
immediately in `serve_http()` before any I/O operations that could yield
2. **Lifecycle protection**: Split `serve_http()` into wrapper and
implementation to ensure proper viewer management
3. **Stream availability checks**: Add fast checks for stream disposal
state before critical operations
4. **Improved error handling**: Convert warnings to fatal errors when
trying to free alive streams

## Key Changes
- **`SrsLiveStream::serve_http()`**: Now immediately registers viewer
and delegates to `serve_http_impl()`
- **`SrsLiveStream::serve_http_impl()`**: Contains the actual HTTP
serving logic
- **`SrsHttpStreamDestroy::call()`**: Enhanced error handling and longer
wait timeout
- **Stream state validation**: Added checks for `entry->enabled` before
proceeding with stream operations

Fixes #4429
2025-08-11 18:57:31 -04:00
..
3rdparty NEW PROTOCOL: Support viewing stream over RTSP. v7.0.47 (#4333) 2025-07-11 08:18:40 -04:00
auto NEW PROTOCOL: Support viewing stream over RTSP. v7.0.47 (#4333) 2025-07-11 08:18:40 -04:00
conf NEW PROTOCOL: Support viewing stream over RTSP. v7.0.47 (#4333) 2025-07-11 08:18:40 -04:00
doc AI: HTTP-FLV: Fix heap-use-after-free crash during stream unmount. v6.0.171 v7.0.50 (#4432) 2025-08-11 18:57:31 -04:00
etc/init.d Squash: Fix bugs 2022-01-13 18:26:28 +08:00
gdb The identifier "ShowCouroutines" needs to be modified to "ShowCoroutines" in order to rectify the typographical error. v6.0.63 (#3703) 2023-07-27 08:12:39 +08:00
ide/srs_clion NEW PROTOCOL: Support viewing stream over RTSP. v7.0.47 (#4333) 2025-07-11 08:18:40 -04:00
modules Moduels: Refine the description 2021-04-21 11:18:35 +08:00
packaging Windows: Refine cygwin pipeline (#3260) 2022-11-21 14:32:26 +08:00
research Player: Get codec by webrtc api: pc.getStats. v7.0.42 (#4310) 2025-06-04 10:28:46 -04:00
scripts AI: Add guide for Augment. (#4404) 2025-06-27 07:23:45 -04:00
src AI: HTTP-FLV: Fix heap-use-after-free crash during stream unmount. v6.0.171 v7.0.50 (#4432) 2025-08-11 18:57:31 -04:00
usr/lib/systemd/system Squash: Support RPM. Fix bugs. 2021-11-04 07:37:17 +08:00
.gitignore rtc2rtmp: Support RTC-to-RTMP remuxing with HEVC. v7.0.43 (#4349) 2025-07-03 08:24:42 -04:00
AUTHORS.md Update CHANGELOG for #4309. v7.0.31 2025-04-26 06:58:00 -04:00
AUTHORS.txt Update AUTHORS 2021-08-25 07:43:35 +08:00
configure RTC: audio packet jitter buffer. v7.0.48 (#4295) 2025-07-16 21:36:56 -04:00
Dockerfile.builds Refine code and add tests for #4289. v7.0.45 (#4412) 2025-07-04 17:26:12 -04:00
Dockerfile.cov Asan: Refine asan warning message for macOS. 2022-12-31 21:20:51 +08:00
Dockerfile.pkg Merge branch v5.0.103 into develop 2022-12-03 21:15:22 +08:00
Dockerfile.test NEW PROTOCOL: Support viewing stream over RTSP. v7.0.47 (#4333) 2025-07-11 08:18:40 -04:00