On 5 Oct 2014, at 19:58, Paul Davis <paul(a)linuxaudiosystems.com> wrote:
On Sun, Oct 5, 2014 at 2:27 PM, Will Godfrey
<willgodfrey(a)musically.me.uk> wrote:
But, what happens if the synth was registered with jack before the sequencer?
Presumably it is now going to get it's MIDI data *after* it has already
processed that callback.
JACK clients are executed in the order required by their interconnections. If client A
*sends* data to client B, then client A will always execute before client B.
if you're silly enough to create a feedback loop, then the order becomes undefined.
Actually the order did get defined in the end: If you make a connection that closes a
feedback loop then all existing connections stay in the same order and the new connection
therefore becomes a ‘backwards’ connection. All new connections either impose a new
forward ordering constraint between clients or, if that is impossible, become backwards
connections to preserve the existing order. Prior to this change adding a feedback
connection or any subsequent connection to a graph could alter the order that connected
clients were executing in but that doesn’t happen any more.
There’s an edge case though where you add a feedback connection and then remove any
forward connections. Last I looked jack 1 re-orders things so the feedback connection
becomes a forwards one (better for low latency) but jack 2 leaves the connection backwards
(better for “clickless connection”).
Simon Jenkins
Bristol, UK