- C 96.6%
- Meson 3.4%
When a flush is requested, the espeak thread called stop_speech() -> espeak_Cancel() with queue_guard held. espeak_Cancel() waits for espeak-ng's internal say thread to acknowledge the cancellation, and that thread can be blocked indefinitely inside a blocking ALSA call (snd_pcm_writei/snd_pcm_drain on a wedged device, as seen with EBUSY errors). In that case queue_guard was held forever, which in turn: - blocked the signal thread on pthread_mutex_lock(), so SIGINT/SIGTERM appeared to be ignored and only SIGKILL could end the process; - left the softsynth thread stuck in request_espeak_stop(), so /dev/softsynth was no longer drained, speakup's kernel buffer filled up, and console output (e.g. dmesg) stalled. Release queue_guard around the espeak_Cancel() call. This is safe because the only queue producer, the softsynth thread, is blocked waiting for stop_acknowledged for as long as stop_requested is set, so the queue cannot be mutated concurrently. Helps: https://github.com/linux-speakup/espeakup/issues/45 Helps: https://github.com/linux-speakup/espeakup/issues/62 Co-Authored-By: Claude <noreply@anthropic.com> |
||
|---|---|---|
| doc | ||
| services | ||
| src | ||
| .clang-format | ||
| .gitignore | ||
| .indent.pro | ||
| COPYING | ||
| meson.build | ||
| meson_options.txt | ||
| README.md | ||
espeakup connector
espeakup is a program which makes it possible for speakup to use the espeak-ng software synthesizer. It does this by reading speakup's softsynth device and passing the text to espeak-ng which actually speaks.
Requirements
This program works with the speakup screen reader, which can be obtained from http://linux-speakup.org, and the espeak-ng software speech synthesizer.
You must have both of these installed and operational. Setting them up is beyond the scope of this document.
Installation
The preferred way to install espeakup is using your distribution's packaging system, but if your distribution does not have a package for espeakup yet, espeakup just uses meson, so you should be able to change to the source directory, then type:
meson setup . ./build
cd ./build
ninja
sudo ninja install
Starting Up
This program should be run after speakup is set up to communicate with a software synthesizer and after /dev/softsynth exists. The way this is done is distribution specific, so it is beyond the scope of this documentation.
Acknowledgements
I would like to thank Marc Mulcahy, the author of the speakup to TTSynth connector, on which this work is based. Also, I would like to thank Kirk Reiser and Jonathan Duddington, the authors of Speakup and Espeak, respectively, for their work.
Filing Bugs
Bugs should be filed on our bug tracker at https://github.com/linux-speakup/issues.