On Wed, 2005-08-10 at 14:33 +0200, Kjetil Svalastog Matheussen wrote:
Okey, this might be totally wrong. It might be that I
haven't fully
understood
how the lock/unlock-stuff in the jack engine works.
But reading the code for jack_driver_buffer_size in jackd/engine, the
following seems to happen:
1. Lock graph
2. Change the buffer sizes integer for all the clients on the server:
for-each-client-do: client->control->nframes = nframes;
3. Unlock the graph.
4. Lock the graph
5. Send a message to all clients that the buffersize must be changed.
5. Unlock the graph.
So, from what I can see, a process-cycle can happen between point 3 and 4,
where the server think the buffersize is the new value, while the clients
thing the buffersize is the old value.
nope.
see libjack/driver.c:jack_driver_nt_bufsize() which is called if using
the ALSA backend or any other non-thread-providing backend.
we stop the backend (e.g. the ALSA PCM device), then reset the
parameters. during the reset, the backend calls the engine's buffer size
callback, which notifies all clients of the change. then we restart the
backend.
--p