[alsa-devel] [PATCH] Fix Jack plugin
Adrian Knoth
adi at drcomp.erfurt.thur.de
Thu Aug 4 16:11:45 CEST 2011
On 08/04/2011 07:35 AM, Kevin Ross wrote:
> I've uploaded a patch to ticket 2727, at
> https://bugtrack.alsa-project.org/alsa-bug/view.php?id=2727
>
> The symptom: Using the Jack plugin causes whatever program is
> outputting audio to hang after about 10-20 seconds.
>
> The cause: The plugin creates a pipe, so that the fd's could be polled
> to indicate completion of a transfer. However, the call to write()
> blocks when playing audio, as nothing actually reads from the pipe, and
> it fills up until it blocks.
>
> The patch:
>
> --- alsa-plugins-1.0.23/jack/pcm_jack.c 2010-04-16 04:11:10.000000000 -0700
> +++ alsa-plugins-1.0.23.new/jack/pcm_jack.c 2011-08-03
> 21:54:51.795378947 -0700
> @@ -307,6 +308,18 @@
> return 0;
> }
>
> +static int make_nonblock(int fd) {
> + int fl;
> +
> + if ((fl = fcntl(fd, F_GETFL)) < 0)
> + return fl;
> +
> + if (fl & O_NONBLOCK)
> + return 0;
> +
> + return fcntl(fd, F_SETFL, fl | O_NONBLOCK);
> +}
> +
> static int snd_pcm_jack_open(snd_pcm_t **pcmp, const char *name,
> snd_config_t *playback_conf,
> snd_config_t *capture_conf,
> @@ -363,6 +376,9 @@
>
> socketpair(AF_LOCAL, SOCK_STREAM, 0, fd);
>
> + make_nonblock(fd[0]);
> + make_nonblock(fd[1]);
> +
> jack->fd = fd[0];
>
> jack->io.version = SND_PCM_IOPLUG_VERSION;
Confirmed to be working. I'm going to send a git patch ASAP.
Cheers
More information about the Alsa-devel
mailing list