[Mineur] async_stop ne ferme pas le websocket : thread executor orphelin jusqu'à 30 s #104

Open
opened 2026-08-26 05:33:46 +00:00 by mat · 0 comments
Owner

Problème

stream.py:221-236 : l'annulation de _stream_site n'arrête pas le thread executor (le await async_add_executor_job est annulé, pas le job) : le thread reste bloqué dans ws.recv() jusqu'au timeout 30 s de la lib, puis pousse encore des messages dans la queue morte — call_soon_threadsafe sur une loop arrêtée peut lever un RuntimeError non attrapé dans le thread → « exception was never retrieved » dans les logs. À l'arrêt d'HA, le shutdown de l'executor peut être retardé d'autant.

Recommandation

  1. Garder une référence au websocket (ou passer un threading.Event checked par la lib) pour le fermer depuis async_stop.
  2. À minimum : try/except autour de call_soon_threadsafe et un ws.settimeout court.

Constaté lors de la review de code pré-v1.0 (v0.8.1).

## Problème `stream.py:221-236` : l'annulation de `_stream_site` **n'arrête pas le thread executor** (le `await async_add_executor_job` est annulé, pas le job) : le thread reste bloqué dans `ws.recv()` jusqu'au timeout 30 s de la lib, puis pousse encore des messages dans la queue morte — `call_soon_threadsafe` sur une loop arrêtée peut lever un `RuntimeError` non attrapé dans le thread → « exception was never retrieved » dans les logs. À l'arrêt d'HA, le shutdown de l'executor peut être retardé d'autant. ## Recommandation 1. Garder une référence au websocket (ou passer un `threading.Event` checked par la lib) pour le fermer depuis `async_stop`. 2. À minimum : try/except autour de `call_soon_threadsafe` et un `ws.settimeout` court. --- Constaté lors de la review de code pré-v1.0 (v0.8.1).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
mat/homeassistant-comwatt#104
No description provided.