Bug Fix - std::vector::erase

- Fixed bug whereby code called std::vector::erase, but then continued
  as though the iterator was still good.
This commit is contained in:
Paul Beckingham 2009-06-15 20:15:40 -04:00
parent 108b486ac1
commit 858f34cf95
2 changed files with 11 additions and 4 deletions

View file

@ -290,6 +290,7 @@ void Context::loadCorrectConfigFile ()
// No need to handle it again.
args.erase (arg);
break;
}
}
@ -305,6 +306,7 @@ void Context::loadCorrectConfigFile ()
}
// Apply overrides of type: "rc.name:value"
std::vector <std::string> filtered;
foreach (arg, args)
{
if (arg->substr (0, 3) == "rc.")
@ -322,11 +324,12 @@ void Context::loadCorrectConfigFile ()
message (std::string ("Configuration override ") + // TODO i18n
arg->substr (3, std::string::npos));
}
// No need to handle it again.
args.erase (arg);
}
else
filtered.push_back (*arg);
}
args = filtered;
}
////////////////////////////////////////////////////////////////////////////////

View file

@ -353,6 +353,7 @@ int TDB::gc ()
// Now move completed and deleted tasks from the pending list to the
// completed list. Isn't garbage collection easy?
std::vector <Task> still_pending;
foreach (task, pending)
{
std::string st = task->get ("status");
@ -361,11 +362,14 @@ int TDB::gc ()
s == Task::deleted)
{
completed.push_back (*task);
pending.erase (task);
++count;
}
else
still_pending.push_back (*task);
}
pending = still_pending;
// No commit - all updates performed manually.
if (count > 0)
{