Re: [Jack-Devel] System signals and JACK

PrevNext  Index
DateMon, 27 Oct 2014 20:54:04 +0100
From Hans Petter Selasky <[hidden] at selasky dot org>
ToRobin Gareus <[hidden] at gareus dot org>, [hidden] at lists dot jackaudio dot org
In-Reply-ToHans Petter Selasky Re: [Jack-Devel] System signals and JACK
Follow-UpHans Petter Selasky Re: [Jack-Devel] System signals and JACK
On 10/27/14 20:42, Hans Petter Selasky wrote:
> On 10/23/14 16:52, Robin Gareus wrote:
>> On 10/23/2014 09:46 AM, Hans Petter Selasky wrote:
>>> Hi,
>>>
>>> Some applications are using signals() and the jack client needs to
>>> ignore these. Consequently read/write calls should be wrapped. See
>>> attached patch. Can this be put upstream? Probably same issue with
>>> jack2.
>>>
>>
>> JACK is a *realtime* audio system, if application code changes the
>> behavior so that jack read/writes to be interrupted by a EINTR, it
>> really seems something is broken by design there.
>>
>> signal() is sent to the main process thread. It should not be able to
>> affect the jack-process callback thread at all. (Marking the jack thread
>> as TASK_UNINTERRUPTIBLE could be a way forward or explicitly using
>> pthread_sigmask() - but those are hacks and workarounds).
>>
>> Either way I cannot reproduce the problem in the first place, jltcgen
>> from https://github.com/x42/ltc-tools uses SIGHUP to re-sync and that
>> never caused issues here with jack2 on various architectures.
>>
>
> Hi,
>
> I have a QT4/5.x based application using JACK, and this is a race. On
> one machine the issue never triggered. On another it happens from time
> to time, and prevents the JACK-client from registering. Have have not
> seen a problem in the jack-process callback thread yet, but when the
> register call is done from the main() thread. Initially I thought there
> was a problem with jackd, and I did a "strace" / "ktrace" and the
> problem went away.
>
> QT4/5.x has similar wrappers around its read/write operations.
>
> --HPS

Hi,

I suspect QT is setting up SIGCHLD, and when treads are created, the 
"main process" is receiving signals, which sometimes kill the jack 
client register.

One solution would be to move the jack client register into the 
beginning of the process thread, to avoid this, or simply add the 
wrappers I'm suggesting.

--HPS
PrevNext  Index

1414439643.19018_0.ltw:2, <544EA2DC.2090003 at selasky dot org>