Changeset 1999

Show
Ignore:
Timestamp:
10/10/11 00:10:52 (2 years ago)
Author:
adi
Message:

Fix segfault upon termination.

Kudos to David Henningsson for the patch.

Closes: #329

Files:

Legend:

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

    r1763 r1999  
    8484//              << endl; 
    8585//     } 
    86     if ( !DebugModuleManager::instance()->unregisterModule( *this ) ) { 
     86 
     87    if (m_manager && !m_manager->unregisterModule( *this ) ) { 
    8788        cerr << "Could not unregister DebugModule at DebugModuleManager" 
    8889             << endl; 
     
    263264DebugModuleManager::~DebugModuleManager() 
    264265{ 
    265     // cleanin up leftover modules 
    266     for ( DebugModuleVectorIterator it = m_debugModules.begin(); 
    267           it != m_debugModules.end(); 
    268           ++it ) 
     266    // cleaning up leftover modules 
     267    while (!m_debugModules.empty()) 
    269268    { 
    270         fprintf(stderr,"Cleaning up leftover debug module: %s\n",(*it)->getName().c_str()); 
    271         m_debugModules.erase( it ); 
    272         delete *it; 
     269        DebugModule *mod = m_debugModules.back(); 
     270        unregisterModule(*mod); 
    273271    } 
    274272 
     
    455453    } else { 
    456454        m_debugModules.push_back( &debugModule ); 
     455        if (debugModule.m_manager == NULL) 
     456                debugModule.m_manager = this; 
    457457    } 
    458458    return true; 
     
    469469        if ( *it == &debugModule ) { 
    470470            m_debugModules.erase( it ); 
     471            if (debugModule.m_manager == this) 
     472                debugModule.m_manager = NULL; 
    471473            return true; 
    472474        } 
  • trunk/libffado/src/debugmodule/debugmodule.h

    r1763 r1999  
    283283void hexDumpQuadlets( quadlet_t *data_start, unsigned int length ); 
    284284 
     285class DebugModuleManager; 
     286 
    285287class DebugModule { 
    286288public: 
     289    friend class DebugModuleManager; 
     290 
    287291    enum { 
    288292        eDL_Message      = DEBUG_LEVEL_MESSAGE, 
     
    333337    std::string   m_name; 
    334338    debug_level_t m_level; 
     339    DebugModuleManager* m_manager; 
    335340}; 
    336341