diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-06-02 13:57:35 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-06-03 09:18:52 +0200 |
commit | f9a2d364553aab2fa716c99de2e27ec6bbbf7d08 (patch) | |
tree | abf5c1a7d9d76ba00ce259913a0a24a986fd2b20 /cpukit | |
parent | sparc: Disable FPU in interrupt context (diff) | |
download | rtems-f9a2d364553aab2fa716c99de2e27ec6bbbf7d08.tar.bz2 |
posix: Fix _POSIX_Timer_Insert_helper() locking
Close #2358.
Diffstat (limited to 'cpukit')
-rw-r--r-- | cpukit/posix/src/timerinserthelper.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/cpukit/posix/src/timerinserthelper.c b/cpukit/posix/src/timerinserthelper.c index 4d7c3fb681..b1f3373e06 100644 --- a/cpukit/posix/src/timerinserthelper.c +++ b/cpukit/posix/src/timerinserthelper.c @@ -37,17 +37,20 @@ bool _POSIX_Timer_Insert_helper( void *arg ) { - ISR_Level level; + ISR_lock_Context lock_context; + Watchdog_Header *header; _Watchdog_Remove_ticks( timer ); - _ISR_Disable( level ); + + header = &_Watchdog_Ticks_header; + _Watchdog_Acquire( header, &lock_context ); /* * Check to see if the watchdog has just been inserted by a * higher priority interrupt. If so, abandon this insert. */ if ( timer->state != WATCHDOG_INACTIVE ) { - _ISR_Enable( level ); + _Watchdog_Release( header, &lock_context ); return false; } @@ -56,7 +59,8 @@ bool _POSIX_Timer_Insert_helper( * so we can atomically initialize it as in use. */ _Watchdog_Initialize( timer, TSR, id, arg ); - _Watchdog_Insert_ticks( timer, ticks ); - _ISR_Enable( level ); + timer->initial = ticks; + _Watchdog_Insert_locked( header, timer, &lock_context ); + _Watchdog_Release( header, &lock_context ); return true; } |