[alsa-devel] [PATCH] Fix Jack plugin

Takashi Iwai tiwai at suse.de
Thu Aug 4 16:34:40 CEST 2011


At Thu, 04 Aug 2011 16:11:45 +0200,
Adrian Knoth wrote:
> 
> 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.

OK, it's good to know that it works in multiple systems.
I committed the patch now to git tree.


Thanks!

Takashi


More information about the Alsa-devel mailing list