Alsa-Devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: GitHub issues - edited <github@alsa-project.org>
To: alsa-devel@alsa-project.org
Subject: ALSA Pulse plugin returns -EIO from snd_pcm_avail_delay() in case of -PA_ERR_NODATA
Date: Mon, 21 Sep 2026 02:15:42 +0200 (CEST)	[thread overview]
Message-ID: <18d72dce2a50b600-webhooks-bot@alsa-project.org> (raw)
In-Reply-To: <18d72dce2a4a3b00-webhooks-bot@alsa-project.org>

alsa-project/alsa-plugins issue #65 was edited from argothiel:

### Environment

- Ubuntu 26.04 under WSL2 / WSLg
- `libasound2-plugins` 1.2.12-2build1
- PulseAudio server available through WSLg

### Problem

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`:
- ALSA Pulse plugin comparison:
  https://github.com/alsa-project/alsa-plugins/blob/ffc8b900792b77764213bac6816ba60f2c8d8025/pulse/pcm_pulse.c#L397-L404
- PulseAudio `pa_stream_get_latency()` documentation:
  https://github.com/pulseaudio/pulseaudio/blob/77d25a1e613095bdf87a1d13b65e7c330565077a/src/pulse/stream.h#L721-L726
- The same issue has been fixed in the `shairport-sync` version:
  https://github.com/mikebrady/shairport-sync/pull/2119

### Reproducer

```c
#include <alsa/asoundlib.h>
#include <assert.h>
#include <stdio.h>

int main(void)
{
    snd_pcm_t *pcm;
    snd_pcm_sframes_t avail, delay;
    int err;

    err = snd_pcm_open(&pcm, "pulse", SND_PCM_STREAM_PLAYBACK, 0);
    assert(err == 0);

    err = snd_pcm_set_params(
        pcm,
        SND_PCM_FORMAT_FLOAT_LE,
        SND_PCM_ACCESS_RW_INTERLEAVED,
        2,
        48000,
        1,
        20000);
    assert(err == 0);

    err = snd_pcm_avail_delay(pcm, &avail, &delay);
    printf("snd_pcm_avail_delay: %s (%d)\n", snd_strerror(err), err);

    snd_pcm_close(pcm);
    return err < 0;
}
```

Build and run:
```sh
cc main.c -lasound && ./a.out
```

### Actual result

```sh
snd_pcm_avail_delay: Input/output error (-5)
```

### Expected result

`snd_pcm_avail_delay()` should wait until PulseAudio timing information is available, then return the available-frame and delay values.

Issue URL     : https://github.com/alsa-project/alsa-plugins/issues/65
Repository URL: https://github.com/alsa-project/alsa-plugins

       reply	other threads:[~2026-09-21  0:16 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <18d72dce2a4a3b00-webhooks-bot@alsa-project.org>
2026-09-21  0:15 ` GitHub issues - edited [this message]
     [not found] <18d72e16c7535000-webhooks-bot@alsa-project.org>
2026-09-21  0:20 ` ALSA Pulse plugin returns -EIO from snd_pcm_avail_delay() in case of -PA_ERR_NODATA GitHub issues - edited
     [not found] <18d72d6ada085a00-webhooks-bot@alsa-project.org>
2026-09-21  0:08 ` GitHub issues - opened

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=18d72dce2a50b600-webhooks-bot@alsa-project.org \
    --to=github@alsa-project.org \
    --cc=alsa-devel@alsa-project.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox