Dispatcharr/apps/proxy
None c69718b559 Fix: Make release_stream() idempotent to prevent double-DECR on rapid channel switching
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
2026-02-17 21:18:20 -06:00
..
hls_proxy Fixes clients not disconnecting. 2025-03-04 11:08:12 -06:00
management/commands Initial integration. 2025-03-03 18:40:30 -06:00
ts_proxy Fix: Make release_stream() idempotent to prevent double-DECR on rapid channel switching 2026-02-17 21:18:20 -06:00
vod_proxy Add guard to remove_connection() 2026-02-10 19:06:51 -06:00
__init__.py Initial integration. 2025-03-03 18:40:30 -06:00
apps.py centralized and lazy-loaded redis client singleton, check for manage.py commands so we don't init proxyservers (redis connection), put manage commmands before starting uwsgi 2025-04-04 16:18:12 -04:00
config.py Enhancement: Update TTL settings for client records and implement periodic refresh during active streaming 2025-10-31 11:53:16 -05:00
signals.py Initial integration. 2025-03-03 18:40:30 -06:00
tasks.py Track VOD connections in Redis. 2025-08-05 21:24:41 -05:00
urls.py Track VOD connections in Redis. 2025-08-05 21:24:41 -05:00
views.py Initial integration. 2025-03-03 18:40:30 -06:00