On Fri, 14 Dec 2007, Stéphane Letz wrote:
Paul Davis:
> Unless jack is
> fixed (or extended) so that it can recover from errors (including
> letting its latency be adjusted on the fly)
<...>
JACK has a number of problems, some of them significant. The things
you've spoken about are not among them.
I'm not sure what other problems you are thinking of? I completely
agree this is the main problem with jack. Its not unusual that a
program connecting to jack can make jackd crash. And it is
even possible to prevent this! (I know it tries to prevent
it though, but it does fail very often too).
Is it something occurring in jackd only? or also jackdmp?
I'm not sure. I haven't used jackdmp that much. But here is a
way to check.
1. Start jackdmp -R
2. Start xmms
3. Play something in xmms
4. Start jackrack
5. Load this ladspa plugin:
http://www.notam02.no/arkiv/src/ladspasleep.tar
[1]
6. Drag the "usecs to sleep" slider quite high.
7. Enable the plugin.
8. Drag the "usecs to sleep" slider back and forth a lot.
This is a quite sure way to make jackd crash.
The second problem I have with jack is that its not possible
to pause or disconnect temporarily from a backend, which
means that whenever you want use a program which use a
soundsystem which does not support jack (in my case, usually
flash, vmware or java), you first have to quit all
programs currently using jack, then stopping jack, then start
the non-jack compatible program. And after being finished
with the non-jack compatible program, start jack and all
its clients again. There was even posted a fix to this bug
on the jack list a few years ago, but of course it was not adopted.
Do you remember what was the idea behind the fix? Was it a new API so
suspend/resume the backend?
I think it was only for the alsa backend. It was recently
reposted on the list too.
[1] I had to edit it a bit to make it compile now:
ttleush ladspasleep # diff -u sleep.c~ sleep.c
--- sleep.c~ 2003-06-29 15:10:31.000000000 +0200
+++ sleep.c 2007-12-14 18:33:21.000000000 +0100
@@ -99,6 +99,7 @@
void _init() {
LADSPA_Descriptor *vd;
LADSPA_PortDescriptor *portdescriptors;
+ LADSPA_PortRangeHint *portRangeHints;
char **portnames;
fprintf(stderr,"Initing sleep");
@@ -125,9 +126,11 @@
portdescriptors[1]=(const
LADSPA_PortDescriptor)(LADSPA_PORT_OUTPUT|LADSPA_PORT_AUDIO);
portdescriptors[2]=(const
LADSPA_PortDescriptor)(LADSPA_PORT_INPUT|LADSPA_PORT_CONTROL);
- vd->PortRangeHints[2].HintDescriptor=LADSPA_HINT_BOUNDED_BELOW|
LADSPA_HINT_BOUNDED_ABOVE;
- vd->PortRangeHints[2].LowerBound=0.0f;
- vd->PortRangeHints[2].UpperBound=1000000.0f;
+ portRangeHints=(LADSPA_PortRangeHint *)(vd->PortRangeHints);
+
+ portRangeHints[2].HintDescriptor=(LADSPA_HINT_BOUNDED_BELOW|
LADSPA_HINT_BOUNDED_ABOVE);
+ portRangeHints[2].LowerBound=0.0f;
+ portRangeHints[2].UpperBound=1000000.0f;
portnames[0]=strdup("Audio in");
portnames[1]=strdup("Audio out");