When switching from whisper.cpp to VOSK via the settings dialog, the
_auto_apply_settings path called reconfigure() without first stopping
active recognition. This allowed background audio/transcription threads
to continue using the old engine's native C resources (whisper.cpp model)
while they were being freed by Python's GC, causing a segmentation fault.
Changes:
- Add stop_recognition() guard in reconfigure() itself when the engine
or model changes and recognition is active — this makes the API safe
regardless of which caller triggers the reconfiguration
- Add defense-in-depth stop_recognition() call in _auto_apply_settings
to match the existing pattern in _apply_settings_internal