Changeset 980

Show
Ignore:
Timestamp:
03/24/08 10:33:26 (13 years ago)
Author:
ppalmers
Message:

- add runaway checks to more RT threads

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/libffado/src/libieee1394/CycleTimerHelper.cpp

    r940 r980  
    217217    m_Parent.addBusResetHandler( m_busreset_functor ); 
    218218 
     219    #ifdef DEBUG 
     220    m_last_loop_entry = 0; 
     221    m_successive_short_loops = 0; 
     222    #endif 
     223 
    219224    return true; 
    220225} 
     
    315320{ 
    316321    debugOutputExtreme( DEBUG_LEVEL_VERY_VERBOSE, "Execute %p...\n", this); 
     322 
     323    #ifdef DEBUG 
     324    uint64_t now = m_Parent.getCurrentTimeAsUsecs(); 
     325    int diff = now - m_last_loop_entry; 
     326    if(diff < 100) { 
     327        debugOutputExtreme(DEBUG_LEVEL_VERY_VERBOSE, 
     328                           "(%p) short loop detected (%d usec), cnt: %d\n", 
     329                           this, diff, m_successive_short_loops); 
     330        m_successive_short_loops++; 
     331        if(m_successive_short_loops > 100) { 
     332            debugError("Shutting down runaway thread\n"); 
     333            return false; 
     334        } 
     335    } else { 
     336        // reset the counter 
     337        m_successive_short_loops = 0; 
     338    } 
     339    m_last_loop_entry = now; 
     340    #endif 
    317341 
    318342    if (!m_first_run) { 
  • trunk/libffado/src/libieee1394/CycleTimerHelper.h

    r932 r980  
    158158    bool            m_unhandled_busreset; 
    159159 
     160#ifdef DEBUG 
     161    uint64_t m_last_loop_entry; 
     162    int m_successive_short_loops; 
     163#endif 
     164 
    160165    // debug stuff 
    161166    DECLARE_DEBUG_MODULE; 
  • trunk/libffado/src/libutil/Watchdog.cpp

    r972 r980  
    5050Watchdog::WatchdogCheckTask::Init() 
    5151{ 
     52    #ifdef DEBUG 
     53    m_last_loop_entry = 0; 
     54    m_successive_short_loops = 0; 
     55    #endif 
    5256    return true; 
    5357} 
     
    6670        m_parent.rescheduleThreads(); 
    6771    } 
     72 
     73    #ifdef DEBUG 
     74    uint64_t now = SystemTimeSource().getCurrentTimeAsUsecs(); 
     75    int diff = now - m_last_loop_entry; 
     76    if(diff < 100) { 
     77        debugOutputExtreme(DEBUG_LEVEL_VERY_VERBOSE, 
     78                           "(%p) short loop detected (%d usec), cnt: %d\n", 
     79                           this, diff, m_successive_short_loops); 
     80        m_successive_short_loops++; 
     81        if(m_successive_short_loops > 100) { 
     82            debugError("Shutting down runaway thread\n"); 
     83            return false; 
     84        } 
     85    } else { 
     86        // reset the counter 
     87        m_successive_short_loops = 0; 
     88    } 
     89    m_last_loop_entry = now; 
     90    #endif 
     91 
    6892    return true; 
    6993} 
     
    81105Watchdog::WatchdogHartbeatTask::Init() 
    82106{ 
     107    #ifdef DEBUG 
     108    m_last_loop_entry = 0; 
     109    m_successive_short_loops = 0; 
     110    #endif 
    83111    return true; 
    84112} 
     
    91119                "(%p) watchdog %p hartbeat\n", this, &m_parent); 
    92120    m_parent.setHartbeat(); 
     121 
     122    #ifdef DEBUG 
     123    uint64_t now = SystemTimeSource().getCurrentTimeAsUsecs(); 
     124    int diff = now - m_last_loop_entry; 
     125    if(diff < 100) { 
     126        debugOutputExtreme(DEBUG_LEVEL_VERY_VERBOSE, 
     127                           "(%p) short loop detected (%d usec), cnt: %d\n", 
     128                           this, diff, m_successive_short_loops); 
     129        m_successive_short_loops++; 
     130        if(m_successive_short_loops > 100) { 
     131            debugError("Shutting down runaway thread\n"); 
     132            return false; 
     133        } 
     134    } else { 
     135        // reset the counter 
     136        m_successive_short_loops = 0; 
     137    } 
     138    m_last_loop_entry = now; 
     139    #endif 
     140 
    93141    return true; 
    94142} 
  • trunk/libffado/src/libutil/Watchdog.h

    r939 r980  
    5050        unsigned int m_interval; 
    5151        // debug stuff 
     52        #ifdef DEBUG 
     53            uint64_t m_last_loop_entry; 
     54            int m_successive_short_loops; 
     55        #endif 
    5256        DECLARE_DEBUG_MODULE_REFERENCE; 
    5357    }; 
     
    6569        unsigned int m_interval; 
    6670        // debug stuff 
     71        #ifdef DEBUG 
     72            uint64_t m_last_loop_entry; 
     73            int m_successive_short_loops; 
     74        #endif 
    6775        DECLARE_DEBUG_MODULE_REFERENCE; 
    6876    };