<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
HI *,<br>
<br>
<br>
I have a multiprocessing program that shall host a JACK server and
two JACK clients. <br>
The server is named "AVB_Processing", the clients are name
"AVB_Talker" and "AVB_Listener".<br>
The JACK server is created and started before forking the other
processes and looks fine:<br>
<br>
<blockquote>JACK server starting in realtime mode with priority 8<br>
self-connect-mode is "Don't restrict self connect requests"<br>
Jack: JackPosixThread::StartImp : create non RT thread<br>
Jack: JackPosixThread::ThreadHandler : start<br>
Jack: playback device hw:1,0<br>
Jack: capture device hw:1,0<br>
Jack: capture device hw:1,0<br>
Jack: playback device hw:1,0<br>
Jack: apparent rate = 48000<br>
Jack: frames per period = 128<br>
Jack: JackDriver::Open capture_driver_name = hw:1,0<br>
Jack: JackDriver::Open playback_driver_name = hw:1,0<br>
Jack: Check protocol client = 8 server = 8<br>
Jack: JackEngine::ClientInternalOpen: name = system<br>
Jack: JackEngine::AllocateRefNum ref = 0<br>
Jack: JackLinuxFutex::Allocate name =
jack_sem.0_AVB_Processing_system val = 0<br>
Jack: JackEngine::NotifyAddClient: name = system<br>
Jack: JackGraphManager::SetBufferSize size = 128<br>
Jack: JackConnectionManager::DirectConnect first: ref1 = 0 ref2 =
0<br>
Jack: JackGraphManager::ConnectRefNum cur_index = 0 ref1 = 0 ref2
= 0<br>
Jack: JackDriver::SetupDriverSync driver sem in flush mode<br>
creating alsa driver ...
hw:1,0|hw:1,0|128|2|48000|2|2|nomon|swmeter|-|32bit<br>
configuring for 48000Hz, period = 128 frames (2.7 ms), buffer = 2
periods<br>
ALSA: final selected sample format for capture: 32bit integer
little-endian<br>
ALSA: use 2 periods for capture<br>
ALSA: final selected sample format for playback: 32bit integer
little-endian<br>
ALSA: use 2 periods for playback<br>
Jack: JackSocketServerChannel::Open<br>
Jack: JackServerSocket::Bind : addr.sun_path
/dev/shm/jack_AVB_Processing_0_0<br>
Jack: JackSocketServerChannel::BuildPoolTable size = 1<br>
Jack: JackEngine::Open<br>
Jack: JackClientSocket::Connect : addr.sun_path
/dev/shm/jack_AVB_Processing_0_0<br>
Jack: JackEngine::ClientInternalOpen: name = freewheel<br>
Jack: JackEngine::AllocateRefNum ref = 1<br>
Jack: JackLinuxFutex::Allocate name =
jack_sem.0_AVB_Processing_freewheel val = 0<br>
Jack: JackEngine::NotifyAddClient: name = freewheel<br>
Jack: JackDriver::ClientNotify ref = 1 driver = system name =
freewheel notify = 0<br>
Jack: JackDriver::ClientNotify ref = 0 driver = freewheel name =
system notify = 0<br>
Jack: JackConnectionManager::DirectConnect first: ref1 = 1 ref2 =
1<br>
Jack: JackGraphManager::ConnectRefNum cur_index = 0 ref1 = 1 ref2
= 1<br>
Jack: JackDriver::SetupDriverSync driver sem in flush mode<br>
Jack: JackGraphManager::SetBufferSize size = 128<br>
Jack: JackAlsaDriver::Attach fBufferSize 128 fSampleRate 48000<br>
Jack: JackEngine::PortRegister ref = 0 name = system:capture_1
type = 32 bit float mono audio flags = 22 buffer_size = 128<br>
Jack: JackGraphManager::AllocatePortAux port_index = 1 name =
system:capture_1 type = 32 bit float mono audio<br>
Jack: JackConnectionManager::AddOutputPort ref = 0 port = 1<br>
Jack: JackEngine::ClientNotify: no callback for notification = 9<br>
Jack: JackEngine::ClientNotify: no callback for notification = 9<br>
Jack: JackAlsaDriver::Attach fCapturePortList[i] 1 <br>
Jack: JackEngine::PortRegister ref = 0 name = system:capture_2
type = 32 bit float mono audio flags = 22 buffer_size = 128<br>
Jack: JackGraphManager::AllocatePortAux port_index = 2 name =
system:capture_2 type = 32 bit float mono audio<br>
Jack: JackConnectionManager::AddOutputPort ref = 0 port = 2<br>
Jack: JackEngine::ClientNotify: no callback for notification = 9<br>
Jack: JackEngine::ClientNotify: no callback for notification = 9<br>
Jack: JackAlsaDriver::Attach fCapturePortList[i] 2 <br>
Jack: JackEngine::PortRegister ref = 0 name = system:playback_1
type = 32 bit float mono audio flags = 21 buffer_size = 128<br>
Jack: JackGraphManager::AllocatePortAux port_index = 3 name =
system:playback_1 type = 32 bit float mono audio<br>
Jack: JackConnectionManager::AddInputPort ref = 0 port = 3<br>
Jack: JackEngine::ClientNotify: no callback for notification = 9<br>
Jack: JackEngine::ClientNotify: no callback for notification = 9<br>
Jack: JackAlsaDriver::Attach fPlaybackPortList[i] 3 <br>
Jack: JackEngine::PortRegister ref = 0 name = system:playback_2
type = 32 bit float mono audio flags = 21 buffer_size = 128<br>
Jack: JackGraphManager::AllocatePortAux port_index = 4 name =
system:playback_2 type = 32 bit float mono audio<br>
Jack: JackConnectionManager::AddInputPort ref = 0 port = 4<br>
Jack: JackEngine::ClientNotify: no callback for notification = 9<br>
Jack: JackEngine::ClientNotify: no callback for notification = 9<br>
Jack: JackAlsaDriver::Attach fPlaybackPortList[i] 4 <br>
Jack: Clock source : hpet<br>
Jack: JackServer::Start<br>
Jack: JackThreadedDriver::Start<br>
Jack: JackPosixThread::StartImp : create non RT thread<br>
Jack: JackPosixThread::ThreadHandler : start<br>
Jack: JackThreadedDriver::Init real-time<br>
Jack: JackPosixThread::AcquireRealTimeImp priority = 8<br>
Jack: JackPosixThread::StartImp : create non RT thread<br>
Jack: JackPosixThread::ThreadHandler : start<br>
Jack: JackSocketServerChannel::ClientCreate socket<br>
Jack: JackSocketServerChannel::BuildPoolTable size = 2<br>
Jack: JackSocketServerChannel::BuildPoolTable fSocketTable i = 1
fd = 56<br>
Jack: JackSocketServerChannel::Execute : fPollTable i = 1 fd = 56<br>
Jack: JackRequest::Notification<br>
Jack: JackDriver::ClientNotify ref = 1 driver = freewheel name =
freewheel notify = 18<br>
Jack: JackDriver::ClientNotify ref = 1 driver = freewheel name =
freewheel notify = 18<br>
Jack: JackDriver::ClientNotify ref = 1 driver = freewheel name =
freewheel notify = 18<br>
Jack: JackDriver::ClientNotify ref = 1 driver = freewheel name =
freewheel notify = 18<br>
Jack: JackEngine::ClientNotify: no callback for notification = 4<br>
Jack: JackEngine::ClientNotify: no callback for notification = 4<br>
Jack: **** alsa_pcm: xrun of at least -5118090.752 msecs<br>
Jack: ALSA XRun wait_status = 0<br>
Jack: JackSocketServerChannel::Execute : fPollTable i = 1 fd = 56<br>
Jack: JackRequest::Notification<br>
Jack: JackEngine::ClientNotify: no callback for notification = 3<br>
Jack: JackEngine::ClientNotify: no callback for notification = 3<br>
Jack: **** alsa_pcm: xrun of at least -5118163.456 msecs<br>
Jack: ALSA XRun wait_status = 0<br>
Jack: JackSocketServerChannel::Execute : fPollTable i = 1 fd = 56<br>
Jack: JackRequest::Notification<br>
Jack: JackEngine::ClientNotify: no callback for notification = 3<br>
Jack: JackEngine::ClientNotify: no callback for notification = 3<br>
</blockquote>
<br>
<br>
<br>
<br>
After the JACK server is running, I fork four processes. Two of
which try to open a JACK client without success:<br>
<br>
<br>
<blockquote>Jack: jack_client_open AVB_Talker<br>
Jack: JackInternalClient::Open name = AVB_Talker<br>
Jack: Check protocol client = 8 server = 8<br>
Jack: JackEngine::ClientInternalOpen: name = AVB_Talker<br>
Jack: JackEngine::AllocateRefNum ref = 2<br>
Jack: JackLinuxFutex::Allocate name =
jack_sem.0_AVB_Processing_AVB_Talker val = 0<br>
Jack: JackPosixProcessSync::TimedWait time out = 5000000<br>
Jack: jack_client_open AVB_Listener<br>
Jack: JackInternalClient::Open name = AVB_Listener<br>
Jack: Check protocol client = 8 server = 8<br>
Jack: JackEngine::ClientInternalOpen: name = AVB_Listener<br>
Jack: JackEngine::AllocateRefNum ref = 2<br>
Jack: JackLinuxFutex::Allocate name =
jack_sem.0_AVB_Processing_AVB_Listener val = 0<br>
Jack: JackPosixProcessSync::TimedWait time out = 5000000<br>
JackPosixProcessSync::LockedTimedWait error usec = 5000000 err =
Connection timed out<br>
Jack: JackPosixProcessSync::TimedWait finished delta = 5000078.0<br>
Driver is not running<br>
Cannot open client name = AVB_Talker<br>
JackPosixProcessSync::LockedTimedWait error usec = 5000000 err =
Connection timed out<br>
Jack: JackPosixProcessSync::TimedWait finished delta = 5000069.0<br>
Driver is not running<br>
Cannot open client name = AVB_Listener<br>
Jack: JackSocketServerChannel::Execute : fPollTable i = 1 fd = 56<br>
</blockquote>
<br>
<br>
<br>
<br>
The client probably fails with "Driver is not running" due to the
ALSA xruns of the server:<br>
<br>
<blockquote>Jack: **** alsa_pcm: xrun of at least -5118090.752 msecs<br>
Jack: ALSA XRun wait_status = 0<br>
Jack: JackSocketServerChannel::Execute : fPollTable i = 1 fd = 56<br>
Jack: JackRequest::Notification<br>
Jack: JackEngine::ClientNotify: no callback for notification = 3<br>
Jack: JackEngine::ClientNotify: no callback for notification = 3<br>
Jack: **** alsa_pcm: xrun of at least -5118163.456 msecs<br>
Jack: ALSA XRun wait_status = 0<br>
</blockquote>
<br>
<br>
Here is the server code:<br>
<br>
<blockquote>static void set_jack_server_parameters( FILE*
filepointer, const JSList * node_ptr)<br>
{<br>
while (node_ptr != NULL) {<br>
jackctl_parameter_t * parameter = (jackctl_parameter_t
*)node_ptr->data;<br>
<br>
if( ( strcmp( jackctl_parameter_get_name(parameter),
"rate" ) == 0 ) ||<br>
( strcmp( jackctl_parameter_get_name(parameter),
"period" ) == 0 ) ||<br>
( strcmp( jackctl_parameter_get_name(parameter),
"nperiods" ) == 0 ) ||<br>
( strcmp( jackctl_parameter_get_name(parameter),
"device" ) == 0 ) ||<br>
( strcmp( jackctl_parameter_get_name(parameter),
"realtime-priority" ) == 0 ) ||<br>
( strcmp( jackctl_parameter_get_name(parameter),
"realtime" ) == 0 ) ||<br>
( strcmp( jackctl_parameter_get_name(parameter),
"inchannels" ) == 0 ) ||<br>
( strcmp( jackctl_parameter_get_name(parameter),
"outchannels" ) == 0 ) ||<br>
( strcmp( jackctl_parameter_get_name(parameter),
"playback" ) == 0 ) ||<br>
( strcmp( jackctl_parameter_get_name(parameter),
"capture" ) == 0 ) ||<br>
( strcmp( jackctl_parameter_get_name(parameter),
"verbose" ) == 0 ) ||<br>
( strcmp( jackctl_parameter_get_name(parameter),
"clock-source" ) == 0 ) ||<br>
( strcmp( jackctl_parameter_get_name(parameter),
"name" ) == 0 ) ){<br>
<br>
union jackctl_parameter_value value;<br>
if( ( strcmp( jackctl_parameter_get_name(parameter),
"name" ) == 0 ) ){<br>
sprintf( value.str, "AVB_Processing");<br>
} else if( ( strcmp(
jackctl_parameter_get_name(parameter), "verbose" ) == 0 ) ){<br>
value.b = true;<br>
} else if( ( strcmp(
jackctl_parameter_get_name(parameter), "clock-source" ) == 0 ) ){<br>
value.ui = 1;<br>
} else if( ( strcmp(
jackctl_parameter_get_name(parameter), "rate" ) == 0 ) ){<br>
value.ui = 48000;<br>
} else if( ( strcmp(
jackctl_parameter_get_name(parameter), "period" ) == 0 ) ){<br>
value.ui = 128;<br>
} else if( ( strcmp(
jackctl_parameter_get_name(parameter), "nperiods" ) == 0 ) ){<br>
value.ui = 2;<br>
} else if( ( strcmp(
jackctl_parameter_get_name(parameter), "device" ) == 0 ) ){<br>
sprintf( value.str, "hw:1,0");<br>
} else if( ( strcmp(
jackctl_parameter_get_name(parameter), "realtime-priority" ) == 0
) ){<br>
value.i = 8;<br>
} else if( ( strcmp(
jackctl_parameter_get_name(parameter), "realtime" ) == 0 ) ){<br>
value.b = true;<br>
} else if( ( strcmp(
jackctl_parameter_get_name(parameter), "inchannels" ) == 0 ) ){<br>
value.ui = 2;<br>
} else if( ( strcmp(
jackctl_parameter_get_name(parameter), "outchannels" ) == 0 ) ){<br>
value.ui = 2;<br>
}<br>
jackctl_parameter_set_value( parameter, &value );<br>
}<br>
node_ptr = jack_slist_next(node_ptr);<br>
}<br>
}<br>
<br>
if( (server = jackctl_server_create(NULL, NULL) ));<br>
parameters = jackctl_server_get_parameters(server);<br>
set_jack_server_parameters(filepointer, parameters);<br>
<br>
drivers = jackctl_server_get_drivers_list(server);<br>
node_ptr = drivers;<br>
while (node_ptr != NULL) {<br>
if( ( strcmp( jackctl_driver_get_name((jackctl_driver_t
*)node_ptr->data), "alsa" ) == 0 ) ){<br>
set_jack_server_parameters( filepointer,
jackctl_driver_get_parameters( ( jackctl_driver_t *)
node_ptr->data) );<br>
}<br>
node_ptr = jack_slist_next(node_ptr);<br>
}<br>
<br>
if( (jackctl_server_open(server, jackctl_server_get_driver(server,
"alsa")) ));<br>
if( (jackctl_server_start(server) ));<br>
</blockquote>
<br>
Jack is working fine outside my program.<br>
I cloned the git repo of jack2 today ( jackdmp 1.9.12 ).<br>
<br>
What might be going wrong here?<br>
<br>
<br>
Thanks,<br>
Ck<br>
</body>
</html>