I'm having trouble to create timer under my embedded Linux running ARM. I'm using a home made C++ library to manage timer. I didn't code it myself, I don't know deeply the implementation despite I have access to the source code... It works for a while and then I got the error "EAGAIN".
Using strace I noticed that when it doesn't work the timer ID is quiet high!
timer_create(CLOCK_MONOTONIC, {0, SIGRT_3, SIGEV_SIGNAL, {...}}, 0xbed50af4) = -1 EAGAIN (Resource temporarily unavailable)
See the pretty low timer ID when it's working:
timer_create(CLOCK_MONOTONIC, {0x3, SIGRT_3, SIGEV_SIGNAL, {...}}, {0x3d}) = 0
I thought that the number of timers was unlimited! Actually not? Should we destroy the timer once we are done with it? I also used the "timer_stats" kernel utility but this didn't help me much ... Are there other debug utility for the timers inside the kernel or any other tool?
Thanks for your help!
You've guessed correctly, you do have a maximum number of timers:
The
timer_create(3posix)
manpage is a bit more blunt about it:While you could raise the
setrlimit(2)
limit on pending signals (ulimit -i
inbash(1)
), be aware that this allocates real kernel memory -- which is an extremely limited resource.I suggest modifying your application to delete or re-use old timers.