Socket calls from timer functions (server based)
Paul Whitfield
paulw at omnitronics.com.au
Wed Apr 13 02:58:17 UTC 2005
Ian Caddy wrote:
> Hi Gene,
>
> As far as I am aware, the TSRs run in the context of the timer interrupt
> service routine, which means you can only perform operations that are
> safe in interrupts.
>
> Network functions are generally not safe to call from interrupts, as
> most network functions are blocking functions.
>
> You will probably need to find another way to implement this, such as
> sending an event or message to a thread that can perform the setsockopt.
>
From the OP's email he is using server based timers
(not present in rtems 4.5).
In this case the timers run in the context of the timer server task.
As noted in OP: In the time server Thread dispatching is
disabled.
The previous advice is probably still the best idea, don't
call network functions from the context of a TSR. Generate
an event or message and call the network function from a
application task.
My reasoning for this is:
TSR's are still "special" functions, they are run
at the highest task priority and should be very "quick"
and never block.
All timers are processed from the one loop and delays as a result of
processing on TSR will effect all the other timers.
Any function with the possibility of blocking should not
be called from a TSR. Network calls can block (even
setting socket options as they need to access mutex's) so
therefore should not be called from a TSR.
Hope that make sense.
Regards
Paul
More information about the users
mailing list