mirror of
https://github.com/Dispatcharr/Dispatcharr.git
synced 2026-07-20 01:59:50 +00:00
Multiple code paths call release_stream() during channel shutdown (stream generator cleanup, _clean_redis_keys, ChannelService.stop_channel), causing
the profile_connections counter to be decremented multiple times for the same stream. The metadata hash fallback persisted longer than the primary keys, allowing subsequent calls to find stale stream_id/m3u_profile and DECR again.
Changes:
- Clear STREAM_ID and M3U_PROFILE metadata fields after decrementing in both the primary and fallback paths, making release_stream() safe to call multiple times
- Add metadata fallback when stream_profile:{id} key is missing but channel_stream:{id} exists, preventing a counter leak in that edge case
- Replace redundant get_stream() call in views.py with direct Redis reads to avoid side-effect INCR from a method that can allocate connection slots
|
||
|---|---|---|
| .. | ||
| services | ||
| __init__.py | ||
| apps.py | ||
| channel_status.py | ||
| client_manager.py | ||
| config_helper.py | ||
| constants.py | ||
| http_streamer.py | ||
| redis_keys.py | ||
| server.py | ||
| stream_buffer.py | ||
| stream_generator.py | ||
| stream_manager.py | ||
| url_utils.py | ||
| urls.py | ||
| utils.py | ||
| views.py | ||