[LAD] Looking for some jackd debugging help

Fons Adriaensen fons at linuxaudio.org
Sun Mar 29 11:35:27 CEST 2020

On Sat, Mar 28, 2020 at 12:38:46PM -0700, Ethan Funk wrote:
> I have been working slowly on a port of a radio automation system I
> originally wrote for OSX to a more general, cross-platform design using
> jack-audio and gstreamer instead of Apple's Core audio API.  As part of
> the design change, I have separated the mix-engine and media handling
> into separate processes, where the mixer forks media players, which
> connect back the core mixer via jack,  then are disconnected by the
> mixer when finished, prior to the media player instance shutting down.

This *should* work of course, but I'm wondering why things are done
that way. In a 'real' studio, would you disconnect and remove e.g.
a CD player after each track, and install a new one for the next
track ?

The simple alternative is to have a fixed number of players running
all the time, and just outputting silence when not playing a track.
Whenever you need to play a track, find and idle player and use it.
But as said, your approach should just work. I'm not yet convinced
this is a Jack problem. I've had much more complex systems (with
tens of jack clients coming and going and hundreds of ports) 
running for months.

> I am not calling jack calls in the real-time render
> thread that are not intended for use in that thread.

Which ones are you calling there ? Normally there is no need
at all to call Jack from the its own process() callback.

> All jack client client call backs are handles through
> a message queue,

Except for process() I hope. Which other callbacks are you
using ?

> So it really does appear to be the connections and
> disconnections that are causing the trouble.

> Here is what I get from my arServer4 core-mixer program's stderr
> (registered to jackd as "ars9550"), just before the jack-server
> shutdown call back fires off:

What happens just before that, that would trigger a crash ?
In other words, does this happen when you call Jack for any
reason (e.g. connect or disconnect), or just by itself ?
> Cannot read socket fd = 7 err = Success
> CheckRes error
> JackSocketClientChannel read fail
> SuspendRefNum error
> JackClient::Execute error name = ars9550
> Server is not running

I'm not familiar with the Jack2 code, so I've no idea what
that could mean.
> I would like to run jackd in gdb so I can see where it is failing, but
> I am unsure how to build it without breaking my system's installed jack
> package, which is of course built without debugging enabled.

You could also try Jack1 instead. Note that this has its own problems,
in particular when connections are changing all the time -- it tends
to run clients out of order, which depending on the application may
go unnoticed, or be a serious problem.

> Any help would be appreciated.
Sorry, I can't help more...


> _______________________________________________
> Linux-audio-dev mailing list
> Linux-audio-dev at lists.linuxaudio.org
> https://lists.linuxaudio.org/listinfo/linux-audio-dev

More information about the Linux-audio-dev mailing list