Show
Ignore:
Timestamp:
05/10/08 12:38:38 (16 years ago)
Author:
ppalmers
Message:

make control more thread safe (unfinished)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/libffado/support/dbus/controlserver.cpp

    r998 r1158  
    3030namespace DBusControl { 
    3131 
    32 IMPL_DEBUG_MODULE( Element, Element, DEBUG_LEVEL_VERBOSE ); 
     32IMPL_DEBUG_MODULE( Element, Element, DEBUG_LEVEL_NORMAL ); 
    3333 
    3434// --- Element 
     
    3939    debugOutput( DEBUG_LEVEL_VERBOSE, "Created Element on '%s'\n", 
    4040                 path().c_str() ); 
     41    setVerboseLevel(m_Slave.getVerboseLevel()); 
    4142} 
    4243 
     
    7475 
    7576    // add children for the slave container 
    76     for ( Control::ConstElementVectorIterator it = slave.getElements().begin(); 
    77       it != slave.getElements().end(); 
     77    const Control::ElementVector elements = slave.getElementVector(); 
     78    for ( Control::ConstElementVectorIterator it = elements.begin(); 
     79      it != elements.end(); 
    7880      ++it ) 
    7981    { 
     
    8688        } 
    8789    } 
     90    slave.releaseElementVector(); 
    8891} 
    8992 
     
    106109    int nbElements=m_Slave.countElements(); 
    107110    if (i<nbElements) { 
    108         return m_Slave.getElements().at(i)->getName(); 
     111        const Control::ElementVector elements = m_Slave.getElementVector(); 
     112        Control::Element *e = elements.at(i); 
     113        std::string name; 
     114        if(e) name = e->getName(); 
     115        m_Slave.releaseElementVector(); 
     116        return name; 
    109117    } else return ""; 
    110118} 
  • trunk/libffado/support/dbus/controlserver.h

    r998 r1158  
    5656    DBus::String getDescription( ); 
    5757 
     58    void setVerboseLevel(int i) {setDebugLevel(i);}; 
    5859private: 
    5960    Control::Element &m_Slave; 
  • trunk/libffado/support/dbus/ffado-dbus-server.cpp

    r962 r1158  
    123123    char* tail; 
    124124 
     125    errno = 0; 
    125126    switch (key) { 
    126127    case 'q': case 's': 
     
    205206busresetHandler() 
    206207{ 
     208    // this is a race condition: the control tree becomes invalid since we 
     209    // are redetecting the devices, but the dispatcher still allows access. 
     210    // at this point. This has to be split up in two. 
    207211    debugOutput( DEBUG_LEVEL_NORMAL, "notified of bus reset...\n" ); 
    208212    dispatcher.leave(); 
  • trunk/libffado/support/dbus/test-dbus-server.cpp

    r958 r1158  
    108108    conn.request_name(SERVER_NAME); 
    109109     
    110     Control::Continuous c0("test0"); 
    111     c0.setVerboseLevel(DEBUG_LEVEL_VERBOSE); 
    112     DBusControl::Continuous fader(conn, "/org/ffado/Control/Test/Fader", c0); 
    113  
    114     Control::Container cont("container1"); 
     110//     Control::Continuous c0("test0"); 
     111//     c0.setVerboseLevel(DEBUG_LEVEL_VERBOSE); 
     112//     DBusControl::Continuous fader(conn, "/org/ffado/Control/Test/Fader", c0); 
     113//  
     114    Control::Container cont(NULL, "container1"); 
    115115    cont.setVerboseLevel(DEBUG_LEVEL_VERBOSE); 
    116      
    117     Control::Container cont1("container2"); 
    118     cont1.setVerboseLevel(DEBUG_LEVEL_VERBOSE); 
    119      
    120     cont.addElement(&cont1); 
    121  
    122     Control::Continuous c1("test1"); 
    123     c1.setVerboseLevel(DEBUG_LEVEL_VERBOSE); 
    124     cont.addElement(&c1); 
    125      
    126     Control::Continuous c2("test2"); 
    127     c2.setVerboseLevel(DEBUG_LEVEL_VERBOSE); 
    128     cont.addElement(&c2); 
    129      
    130     Control::Continuous c3("test3"); 
    131     c3.setVerboseLevel(DEBUG_LEVEL_VERBOSE); 
    132     cont.addElement(&c3); 
    133  
    134     Control::Continuous c4("test4"); 
    135     c4.setVerboseLevel(DEBUG_LEVEL_VERBOSE); 
    136     cont1.addElement(&c4); 
    137  
    138     Control::Continuous c5("test5"); 
    139     c5.setVerboseLevel(DEBUG_LEVEL_VERBOSE); 
    140     cont1.addElement(&c5); 
    141      
    142     Control::Discrete d1("test_discr1"); 
    143     d1.setVerboseLevel(DEBUG_LEVEL_VERBOSE); 
    144     cont1.addElement(&d1); 
    145      
    146     Control::Enum e1("test_enum"); 
    147     e1.setVerboseLevel(DEBUG_LEVEL_VERBOSE); 
    148     cont1.addElement(&e1); 
    149  
    150     Control::AttributeEnum a1("test_attrenum"); 
    151     a1.setVerboseLevel(DEBUG_LEVEL_VERBOSE); 
    152     cont1.addElement(&a1); 
    153      
    154     Control::Text t1("test_text"); 
    155     t1.setVerboseLevel(DEBUG_LEVEL_VERBOSE); 
    156     cont1.addElement(&t1); 
     116//      
     117//     Control::Container cont1("container2"); 
     118//     cont1.setVerboseLevel(DEBUG_LEVEL_VERBOSE); 
     119//      
     120//     cont.addElement(&cont1); 
     121//  
     122//     Control::Continuous c1("test1"); 
     123//     c1.setVerboseLevel(DEBUG_LEVEL_VERBOSE); 
     124//     cont.addElement(&c1); 
     125//      
     126//     Control::Continuous c2("test2"); 
     127//     c2.setVerboseLevel(DEBUG_LEVEL_VERBOSE); 
     128//     cont.addElement(&c2); 
     129//      
     130//     Control::Continuous c3("test3"); 
     131//     c3.setVerboseLevel(DEBUG_LEVEL_VERBOSE); 
     132//     cont.addElement(&c3); 
     133//  
     134//     Control::Continuous c4("test4"); 
     135//     c4.setVerboseLevel(DEBUG_LEVEL_VERBOSE); 
     136//     cont1.addElement(&c4); 
     137//  
     138//     Control::Continuous c5("test5"); 
     139//     c5.setVerboseLevel(DEBUG_LEVEL_VERBOSE); 
     140//     cont1.addElement(&c5); 
     141//      
     142//     Control::Discrete d1("test_discr1"); 
     143//     d1.setVerboseLevel(DEBUG_LEVEL_VERBOSE); 
     144//     cont1.addElement(&d1); 
     145//      
     146//     Control::Enum e1("test_enum"); 
     147//     e1.setVerboseLevel(DEBUG_LEVEL_VERBOSE); 
     148//     cont1.addElement(&e1); 
     149//  
     150//     Control::AttributeEnum a1("test_attrenum"); 
     151//     a1.setVerboseLevel(DEBUG_LEVEL_VERBOSE); 
     152//     cont1.addElement(&a1); 
     153//      
     154//     Control::Text t1("test_text"); 
     155//     t1.setVerboseLevel(DEBUG_LEVEL_VERBOSE); 
     156//     cont1.addElement(&t1); 
    157157 
    158158    // Note: create handlers AFTER all children are added