[LAU] Segfault using zita-j2a

Robin Gareus robin at gareus.org
Thu Oct 25 15:53:20 UTC 2012


On 10/25/2012 05:49 PM, Jannis Achstetter wrote:
> Am 25.10.2012 17:23, schrieb Robin Gareus:
>> On 10/25/2012 04:54 PM, Jannis Achstetter wrote:
>>> [...]
>> Classic race condition. The jack_client is activated before the
>> resampler is initialized.
>>
>> zita-j2a.cc:200 creates the jack-client and calls jack_activate.
>> process_callbacks can arrive starting now.
>>
>> but not until zita-j2a.cc:211 calls J->start() the data-structures
>> required to do the processing are initialized.
>>
>> Easiest solution is probably to check if start() has been called in the
>> process callback:
>>
>> --- a/jackclient.cc
>> +++ b/jackclient.cc
>> @@ -301,6 +301,8 @@ int Jackclient::jack_process (int nframes)
>>      jack_nframes_t  ft;
>>      double          tj, err, d1, d2;
>>
>> +    if (_state == INIT) return 0;
>> +
>>      // Buffer size change or other evil.
>>      if (_state == TERM)
> 
> Sounds reasonable but still crashes with the same error. I'll try to
> debug this further :)
> 

it was a thinko anyway.
 if (_state < WAIT) return 0;
a few lines later would have caught that condition, too.


More information about the Linux-audio-user mailing list