You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
ALSA Pulse plugin returns -EIO from snd_pcm_avail_delay() in case of -PA_ERR_NODATA #65
Immediately after configuring a playback PCM opened through the ALSA pulse plugin, snd_pcm_avail_delay() returns -EIO. This seems to be an issue with pulse_delay() which calls pa_stream_get_latency(). PulseAudio documents that this function returns -PA_ERR_NODATA when timing information is not available yet. The ALSA Pulse plugin compares the result against positive PA_ERR_NODATA; it therefore treats that temporary condition as an unrelated failure and returns -EIO:
Independent confirmation on Ubuntu 24.04 under WSL2/WSLg, with Codex CLI 0.159.3, CPAL 0.18.2, and libasound2-plugins 1.2.7.1-1ubuntu5.
Codex voice sometimes worked for several spoken turns, then failed with “voice audio session stopped unexpectedly”; other attempts failed shortly after starting. Ordinary PulseAudio/ALSA recording and playback worked. A separate CPAL duplex probe also passed, so those checks alone did not expose the failure.
I traced the actual bundled Codex voice helper under GDB and caught its CPAL device-error callback. The error was:
ALSA function 'snd_pcm_avail_delay' failed with error 'I/O error (5)'
The caller was cpal::host::alsa::output_stream_worker, identifying the speaker/output stream. Codex recorded phase=Some(Device) exit_code=Some(37).
I independently found the incorrect PA_ERR_NODATA check and built a local copy of the PulseAudio PCM plugin. The change actually tested here was:
- if (err != PA_ERR_NODATA) {+ if (pa_context_errno(pcm->p->context) != PA_ERR_NODATA) {
The plugin was selected through a user ALSA configuration override:
With that plugin active, the same Codex session accepted a synthetic spoken test and replied, then transcribed the physical microphone and responded normally. This was done without another WSL restart. Only new audio streams were opened.
After finding this existing issue, I agree that the direct negative-return-code comparison proposed in #67 is the smaller upstream correction:
- if (err != PA_ERR_NODATA) {+ if (err != -PA_ERR_NODATA) {
The exact return value from pa_stream_get_latency() was not captured in my debugger run; the verified observations are the output callback's ALSA EIO and successful voice operation after the context-error-check variant. This adds a local confirmation on another plugin version, rather than establishing that every Codex Device/37 failure has this cause.
Activity
Fix latency error check in pulse_delay()
dblumenau commentedon Oct 1, 2026
Independent confirmation on Ubuntu 24.04 under WSL2/WSLg, with Codex CLI 0.159.3, CPAL 0.18.2, and
libasound2-plugins 1.2.7.1-1ubuntu5.Codex voice sometimes worked for several spoken turns, then failed with “voice audio session stopped unexpectedly”; other attempts failed shortly after starting. Ordinary PulseAudio/ALSA recording and playback worked. A separate CPAL duplex probe also passed, so those checks alone did not expose the failure.
I traced the actual bundled Codex voice helper under GDB and caught its CPAL device-error callback. The error was:
The caller was
cpal::host::alsa::output_stream_worker, identifying the speaker/output stream. Codex recordedphase=Some(Device) exit_code=Some(37).I independently found the incorrect
PA_ERR_NODATAcheck and built a local copy of the PulseAudio PCM plugin. The change actually tested here was:The plugin was selected through a user ALSA configuration override:
With that plugin active, the same Codex session accepted a synthetic spoken test and replied, then transcribed the physical microphone and responded normally. This was done without another WSL restart. Only new audio streams were opened.
After finding this existing issue, I agree that the direct negative-return-code comparison proposed in #67 is the smaller upstream correction:
The exact return value from
pa_stream_get_latency()was not captured in my debugger run; the verified observations are the output callback's ALSA EIO and successful voice operation after the context-error-check variant. This adds a local confirmation on another plugin version, rather than establishing that every Codex Device/37 failure has this cause.Related application report: openai/codex#47370
Fix latency error check in pulse_delay()
Fix latency error check in pulse_delay()