survive erase iterator
authorKlaus Kaempf <kkaempf@suse.de>
Sun, 26 Feb 2006 16:29:30 +0000 (16:29 +0000)
committerKlaus Kaempf <kkaempf@suse.de>
Sun, 26 Feb 2006 16:29:30 +0000 (16:29 +0000)
zypp/pool/PoolImpl.cc

index a737bdd..a8b5b47 100644 (file)
@@ -123,19 +123,23 @@ namespace zypp
     storeDelete( PoolTraits::DepCapItemContainerT & store_r, const PoolItem & item_r, Dep cap_r )
     {
       CapSet caps = item_r->dep( cap_r );
+XXX << "storeDelete(" << item_r << ")" << endl;
       for (CapSet::iterator ic = caps.begin(); ic != caps.end(); ++ic) {
        PoolTraits::CapItemContainerT capitems = store_r[cap_r][ic->index()];
        for (PoolTraits::CapItemContainerT::iterator pos = capitems.begin();
-                                            pos != capitems.end(); ++pos)
+                                            pos != capitems.end();)
        {
+           PoolTraits::CapItemContainerT::iterator next = pos; ++next;
            if (pos->item == item_r)
                capitems.erase( pos );
+           pos = next;
        }
       }
     }
 
     void CapHash::erase( const PoolItem & item_r )
     {
+XXX << "CapHash::erase(" << item_r << ")" << endl;
       storeDelete( _store, item_r, Dep::PROVIDES );
       storeDelete( _store, item_r, Dep::REQUIRES );
       storeDelete( _store, item_r, Dep::CONFLICTS );