This fixes a bug when port is appearing, connect attempt is made,
connect fails because port has just disappeared, port reappears then
but new connect attempt was not made. Happens quite easily with
wineasio apps that "probe" (nuendo2 for example).
If the first JACK client that appears has pid different from the one
of the child process, send SIGUSR1 on L1 save to this first
grandchild.
This changeset fixes the "run L1 app in terminal" issue and the
similar issue with dash (the default shell on Debian and Ubuntu, that
for simple commandlines does fork() and exec() instead of just exec(),
like bash does. This changeset also fixes the situation with complex
commandlines that result in only one JACK client.
The complex commandlines that result in multiple processes creating
JACK clients are handled by sending the SIGUSR1 to the first process
that creates JACK client. In future this could be improved by sending
SIGUSR1 to all of them but it is probably better to avoid such
situations by creating one app per JACK-creating process.
Don't use jack ids for associating client in jack graph with client in vgraph
because jack ids can change (apps can create clients in random order).
jack ids are not valid after jack server stop
This changeset switches to interlinking the two client by each one storing uuid of the other.
There are three types of ports depeneding on references to them:
* ports that are referenced from jack and studio graphs
* ports that are referenced from jack and room graphs
* studio-room link ports that are referenced from studio and room graphs
The old approach was to destroy ports when removing references from jack graph.
Studio-room link ports were destroyed when removing the room.
However this caused double free when removing app ports that appear in jack and
room graphs.
The introduced implementation uses reference counting of graph references to ports.
Temporary references (like the one returned by port constructor and graph_get_port())
are not tracked.
JACK graph connections are always visible and match the actual
JACK graph connections. So the logic for hiding connections when
they are removed should be disabled for JACK graphs. See
also commit 5ef9e1e006 where this
bug was intoduced.