[linux-audio-dev] Daemon mode
Patrick Shirkey
pshirkey at boosthardware.com
Sat Dec 16 13:48:04 UTC 2006
Lars Luthman wrote:
> On Sat, 2006-12-16 at 12:14 +0100, Lars Luthman wrote:
>> On Sat, 2006-12-16 at 17:56 +0700, Patrick Shirkey wrote:
>>> Hi,
>>>
>>> I am adding a Daemon mode to jackEQ and have most of the code in place now.
>>>
>>> I am stuck at the point where the daemon starts up and keeps going.
>>>
>>> Essentially I need the daemon mode equivalent of gtk_main() that keeps
>>> ticking over until the app is told to stop or otherwise shutdown.
>>>
>>> I have not threaded the app at this point so hopefully there is a very
>>> simple solution.
>> So the only thread that needs to do anything is the JACK thread? In that
>> case you can just add something like
>>
>> ... init code ...
>>
>> bool run = true;
>> while (run) sleep(10000);
>>
>> ... cleanup code ...
>>
>> in the main thread, after setting up JACK. If you want to be nice you
>> can add signal handlers for SIGHUP and SIGINT that set 'run' to false.
>
> Ehm, and in that case you better change the sleep time to 1 or use
> usleep() and specify microseconds instead. You wouldn't want to wait for
> hours after trying to stop the program.
>
> Or is sleep() interrupted by signals even if there are signal handlers
> for them?
>
Thanks for the pointer Lars.
However I'm using c so this code doesn't work. I have modified it like so:
int run = TRUE;
while (run)
sleep(10000);
but that just gives a segv. It runs for about a second then gives up.
I'm also looking at the code for jackd and have spotted this function:
sigwait (&signals, &sig);
so I added some new bits and pieces like so:
static sigset_t signals;
int main(int argc, char *argv[])
{
int run;
int sig;
sigset_t allsignals;
sigemptyset (&signals);
sigaddset(&signals, SIGHUP);
sigaddset(&signals, SIGINT);
sigaddset(&signals, SIGQUIT);
sigaddset(&signals, SIGPIPE);
sigaddset(&signals, SIGTERM);
sigfillset (&allsignals);
process_init();
run = TRUE;
while (run)
sigwait (&signals, &sig);
return 0;
}
but that also returns segv at sigwait(). If I put a printf after sigwait
it doesn't print. Before is ok.
I'm not sure how to proceed from here.
Cheers.
--
Patrick Shirkey - Boost Hardware Ltd.
Http://www.boosthardware.com
Http://lau.linuxaudio.org - The Linux Audio Users guide
========================================
"Anything your mind can see you can manifest physically, then it will
become reality" - Macka B
More information about the Linux-audio-dev
mailing list