<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>