An Overlay-based
Virtual Network Substrate
SpoVNet

Changeset 9964 for source


Ignore:
Timestamp:
Jul 8, 2011, 5:02:48 PM (8 years ago)
Author:
Christoph Mayer
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • source/ariba/overlay/BaseOverlay.cpp

    r9946 r9964  
    110110
    111111                // return true, if ttl is elapsed
    112                 return ( difftime( time(NULL), this->last_update ) >= ttl );
     112                return ( difftime( time(NULL), this->last_update ) > ttl );
    113113        }
    114114
     
    128128                vector<Data> vect;
    129129                BOOST_FOREACH( ValueEntry& e, values )
    130                 vect.push_back( e.get_value() );
     130                        vect.push_back( e.get_value() );
    131131                return vect;
    132132        }
     
    154154
    155155        void put( const Data& key, const Data& value, uint16_t ttl = 0 ) {
     156                cleanup();
    156157
    157158                // find entry
     
    209210
    210211        bool remove( const Data& key ) {
     212                cleanup();
     213
    211214                // find entry
    212215                for (Entries::iterator i = entries.begin(); i != entries.end(); i++) {
     
    215218                        // found? yes-> delete entry
    216219                        if ( equals(entry.key, key) ) {
    217                                 i = entries.erase(i)-1;
     220                                entries.erase(i);
    218221                                return true;
    219222                        }
     
    223226
    224227        bool remove( const Data& key, const Data& value ) {
     228                cleanup();
    225229                // find entry
    226230                for (Entries::iterator i = entries.begin(); i != entries.end(); i++) {
     
    244248
    245249        void cleanup() {
    246                 // find entry
    247250                for (Entries::iterator i = entries.begin(); i != entries.end(); i++) {
    248251                        DHTEntry& entry = *i;
    249 
    250                         for (Values::iterator j = entry.values.begin();
    251                                         j != entry.values.end(); j++) {
    252 
    253                                 // value found? yes-> delete
    254                                 if (j->is_ttl_elapsed())
    255                                         j = entry.values.erase(j)-1;
    256                         }
    257 
    258                         if (entry.values.size()==0) i = entries.erase(i)-1;
     252                        entry.erase_expired_entries();
     253                        if (entry.values.size()==0)
     254                                i = entries.erase(i)-1;
    259255                }
    260256        }
Note: See TracChangeset for help on using the changeset viewer.