diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-07-22 13:48:51 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-07-22 16:57:26 +0200 |
commit | e2005af632d0e38bcb9d47fe8fd7b82379d2e95f (patch) | |
tree | 736ed7bfccb94f72f69bc3ee69f17031401b8a68 | |
parent | score: Add WATCHDOG_INITIALIZER() (diff) | |
download | rtems-e2005af632d0e38bcb9d47fe8fd7b82379d2e95f.tar.bz2 |
posix: Statically init _POSIX_signals_Alarm_timer
-rw-r--r-- | cpukit/posix/include/rtems/posix/psignalimpl.h | 2 | ||||
-rw-r--r-- | cpukit/posix/src/alarm.c | 35 | ||||
-rw-r--r-- | cpukit/posix/src/psignal.c | 2 |
3 files changed, 16 insertions, 23 deletions
diff --git a/cpukit/posix/include/rtems/posix/psignalimpl.h b/cpukit/posix/include/rtems/posix/psignalimpl.h index 481a7ea57e..957daf3b18 100644 --- a/cpukit/posix/include/rtems/posix/psignalimpl.h +++ b/cpukit/posix/include/rtems/posix/psignalimpl.h @@ -59,8 +59,6 @@ extern const struct sigaction _POSIX_signals_Default_vectors[ SIG_ARRAY_MAX ]; extern struct sigaction _POSIX_signals_Vectors[ SIG_ARRAY_MAX ]; -extern Watchdog_Control _POSIX_signals_Alarm_timer; - extern Watchdog_Control _POSIX_signals_Ualarm_timer; extern Thread_queue_Control _POSIX_signals_Wait_queue; diff --git a/cpukit/posix/src/alarm.c b/cpukit/posix/src/alarm.c index 190a7fbd5b..c671b9e161 100644 --- a/cpukit/posix/src/alarm.c +++ b/cpukit/posix/src/alarm.c @@ -41,35 +41,32 @@ static void _POSIX_signals_Alarm_TSR( /* XXX can't print from an ISR, should this be fatal? */ } +static Watchdog_Control _POSIX_signals_Alarm_timer = WATCHDOG_INITIALIZER( + _POSIX_signals_Alarm_TSR, + 0, + NULL +); + unsigned int alarm( unsigned int seconds ) { unsigned int remaining = 0; Watchdog_Control *the_timer; + Watchdog_States state; the_timer = &_POSIX_signals_Alarm_timer; - /* - * Initialize the timer used to implement alarm(). - */ - - if ( !the_timer->routine ) { - _Watchdog_Initialize( the_timer, _POSIX_signals_Alarm_TSR, 0, NULL ); - } else { - Watchdog_States state; - - state = _Watchdog_Remove( the_timer ); - if ( (state == WATCHDOG_ACTIVE) || (state == WATCHDOG_REMOVE_IT) ) { - /* - * The stop_time and start_time fields are snapshots of ticks since - * boot. Since alarm() is dealing in seconds, we must account for - * this. - */ + state = _Watchdog_Remove( the_timer ); + if ( (state == WATCHDOG_ACTIVE) || (state == WATCHDOG_REMOVE_IT) ) { + /* + * The stop_time and start_time fields are snapshots of ticks since + * boot. Since alarm() is dealing in seconds, we must account for + * this. + */ - remaining = the_timer->initial - - ((the_timer->stop_time - the_timer->start_time) / TOD_TICKS_PER_SECOND); - } + remaining = the_timer->initial - + ((the_timer->stop_time - the_timer->start_time) / TOD_TICKS_PER_SECOND); } if ( seconds ) diff --git a/cpukit/posix/src/psignal.c b/cpukit/posix/src/psignal.c index a8f1a28b22..71c5fc98fa 100644 --- a/cpukit/posix/src/psignal.c +++ b/cpukit/posix/src/psignal.c @@ -95,7 +95,6 @@ Thread_queue_Control _POSIX_signals_Wait_queue; Chain_Control _POSIX_signals_Inactive_siginfo; Chain_Control _POSIX_signals_Siginfo[ SIG_ARRAY_MAX ]; -Watchdog_Control _POSIX_signals_Alarm_timer; Watchdog_Control _POSIX_signals_Ualarm_timer; /* @@ -234,6 +233,5 @@ void _POSIX_signals_Manager_Initialization(void) /* * Initialize the Alarm Timer */ - _Watchdog_Initialize( &_POSIX_signals_Alarm_timer, NULL, 0, NULL ); _Watchdog_Initialize( &_POSIX_signals_Ualarm_timer, NULL, 0, NULL ); } |