diff --git a/pmoparadise/RADIO_PARADISE_STREAM_SOURCE.md b/pmoparadise/RADIO_PARADISE_STREAM_SOURCE.md index 37c05589..35bb5bf5 100644 --- a/pmoparadise/RADIO_PARADISE_STREAM_SOURCE.md +++ b/pmoparadise/RADIO_PARADISE_STREAM_SOURCE.md @@ -118,8 +118,8 @@ AudioSegment::new_audio(42, AudioChunk::I16(...)) const RECENT_BLOCKS_CACHE_SIZE: usize = 10; fn mark_block_downloaded(&mut self, event_id: EventId) { - // Retirer le plus ancien si on est déjà à la limite (évite de dépasser la capacité) - if self.recent_blocks.len() >= RECENT_BLOCKS_CACHE_SIZE { + // Retirer tous les éléments excédentaires (garantit <= CACHE_SIZE) + while self.recent_blocks.len() >= RECENT_BLOCKS_CACHE_SIZE { self.recent_blocks.pop_front(); } @@ -131,6 +131,7 @@ fn mark_block_downloaded(&mut self, event_id: EventId) { **Avantages VecDeque** : - ✅ Ordre FIFO garanti (le plus ancien est toujours retiré) - ✅ Simple et prévisible +- ✅ Robuste : `while` garantit exactement 10 éléments max, même en cas d'état anormal - ✅ Ne dépasse jamais la capacité pré-allouée (retire avant d'ajouter) - ✅ Pour 10 éléments, `contains()` en O(n) reste très performant diff --git a/pmoparadise/src/radio_paradise_stream_source.rs b/pmoparadise/src/radio_paradise_stream_source.rs index f07859ff..6bb60b10 100644 --- a/pmoparadise/src/radio_paradise_stream_source.rs +++ b/pmoparadise/src/radio_paradise_stream_source.rs @@ -67,8 +67,8 @@ impl RadioParadiseStreamSourceLogic { /// Marque un bloc comme récemment téléchargé (FIFO) fn mark_block_downloaded(&mut self, event_id: EventId) { - // Retirer le plus ancien si on est déjà à la limite (évite de dépasser la capacité) - if self.recent_blocks.len() >= RECENT_BLOCKS_CACHE_SIZE { + // Retirer tous les éléments excédentaires (garantit <= CACHE_SIZE) + while self.recent_blocks.len() >= RECENT_BLOCKS_CACHE_SIZE { self.recent_blocks.pop_front(); }