src/ssx/ssx/ssx_timer_init.c
/// Create (initialize) a nonpreemptible timer.
///
/// \param timer The SsxTimer to initialize.
///
/// \param callback The timer callback
///
/// \param arg Private data provided to the callback.
///
/// Once created with ssx_timer_create_preemptible() a timer can be scheduled
/// with ssx_timer_schedule() or ssx_timer_schedule_absolute(), which queues
/// the timer in the kernel time queue.  Timers can be cancelled by a call of
/// ssx_timer_cancel().
///
/// Timers created with ssx_timer_create_nonpreemptible() are always run as
/// noncritical interrupt handlers with interrupt preemption disabled. Timer
/// callbacks are free to later enable preemption if desired, but must always
/// exit with noncritical interrupts disabled.
///
/// \note The use of ssx_timer_create_nonpreemptible() should be rare, and the
/// timer callbacks should be short and sweet to avoid long interrupt
/// latencies for other interrupts. This API was initially introduced for use
/// by the SSX kernel itself when scheduling thread-timer callbacks to avoid
/// potential race conditions with other interrupts that may modify thread
/// state or the state of the time queue. Applications may also require this
/// facility to guarantee a consistent state in the event that other
/// interrupts may cancel the timer.
///
/// Caution: SSX has no way to know if an SsxTimer structure provided to
/// ssx_timer_create() is safe to use as a timer, and will silently modify
/// whatever memory is provided.
///
/// Return values other then SSX_OK (0) are errors; see \ref ssx_errors
///
/// \retval 0 Successful completion
///
/// \retval -SSX_INVALID_TIMER_AT_CREATE The \a timer is a null (0) pointer.
Create (initialize) a nonpreemptible timer.
\param timer The SsxTimer to initialize.

\param callback The timer callback

\param arg Private data provided to the callback.

Once created with ssx_timer_create_preemptible() a timer can be scheduled
with ssx_timer_schedule() or ssx_timer_schedule_absolute(), which queues
the timer in the kernel time queue.  Timers can be cancelled by a call of
ssx_timer_cancel().

Timers created with ssx_timer_create_nonpreemptible() are always run as
noncritical interrupt handlers with interrupt preemption disabled. Timer
callbacks are free to later enable preemption if desired, but must always
exit with noncritical interrupts disabled.

\note The use of ssx_timer_create_nonpreemptible() should be rare, and the
timer callbacks should be short and sweet to avoid long interrupt
latencies for other interrupts. This API was initially introduced for use
by the SSX kernel itself when scheduling thread-timer callbacks to avoid
potential race conditions with other interrupts that may modify thread
state or the state of the time queue. Applications may also require this
facility to guarantee a consistent state in the event that other
interrupts may cancel the timer.

SSX has no way to know if an SsxTimer structure provided to
ssx_timer_create() is safe to use as a timer, and will silently modify
whatever memory is provided.

Return values other then SSX_OK (0) are errors; see \ref ssx_errors

\retval 0 Successful completion

\retval -SSX_INVALID_TIMER_AT_CREATE The \a timer is a null (0) pointer.
Create ( initialize ) a nonpreemptible timer . \ param timer The SsxTimer to initialize . \ param callback The timer callback \ param arg Private data provided to the callback . Once created with ssx_timer_create_preemptible () a timer can be scheduled with ssx_timer_schedule () or ssx_timer_schedule_absolute () which queues the timer in the kernel time queue . Timers can be cancelled by a call of ssx_timer_cancel () . Timers created with ssx_timer_create_nonpreemptible () are always run as noncritical interrupt handlers with interrupt preemption disabled . Timer callbacks are free to later enable preemption if desired but must always exit with noncritical interrupts disabled . \ note The use of ssx_timer_create_nonpreemptible () should be rare and the timer callbacks should be short and sweet to avoid long interrupt latencies for other interrupts . This API was initially introduced for use by the SSX kernel itself when scheduling thread - timer callbacks to avoid potential race conditions with other interrupts that may modify thread state or the state of the time queue . Applications may also require this facility to guarantee a consistent state in the event that other interrupts may cancel the timer . SSX has no way to know if an SsxTimer structure provided to ssx_timer_create () is safe to use as a timer and will silently modify whatever memory is provided . Return values other then SSX_OK ( 0 ) are errors ; see \ ref ssx_errors \ retval 0 Successful completion \ retval - SSX_INVALID_TIMER_AT_CREATE The \ a timer is a null ( 0 ) pointer .
int
ssx_timer_create_nonpreemptible(SsxTimer*         timer,
                                SsxTimerCallback callback,
                                void*             arg)
{
    return _ssx_timer_create(timer, callback, arg, 0);
}
int ssx_timer_create_nonpreemptible ( SsxTimer * timer , SsxTimerCallback callback , void * arg ) { return _ssx_timer_create ( timer , callback , arg , 0 ) ; }
Create (initialize) a nonpreemptible timer.
Create ( initialize ) a nonpreemptible timer .