From: Francesco Chemolli Date: Wed, 19 Feb 2014 17:01:30 +0000 (+0100) Subject: Fix uses of std::remove to actually resize the data structures which were cleaned-up. X-Git-Tag: SQUID_3_5_0_1~361 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6e1410f95b3d7532a663ef0adaaaaa905c563439;p=thirdparty%2Fsquid.git Fix uses of std::remove to actually resize the data structures which were cleaned-up. --- diff --git a/src/HttpHeader.cc b/src/HttpHeader.cc index de002db6bc..56eb4b32e6 100644 --- a/src/HttpHeader.cc +++ b/src/HttpHeader.cc @@ -892,7 +892,10 @@ HttpHeader::delAt(HttpHeaderPos pos, int &headers_deleted) void HttpHeader::compact() { - std::remove(entries.begin(), entries.end(), static_cast(NULL)); + // TODO: optimize removal, or possibly make it so that's not needed. + std::vector::iterator newend; + newend = std::remove(entries.begin(), entries.end(), static_cast(NULL)); + entries.resize(newend-entries.begin()); } /* diff --git a/src/adaptation/Config.cc b/src/adaptation/Config.cc index 247731b901..62f68c3ee5 100644 --- a/src/adaptation/Config.cc +++ b/src/adaptation/Config.cc @@ -88,7 +88,9 @@ Adaptation::Config::removeService(const String& service) for (SGSI it = services.begin(); it != services.end(); ++it) { if (*it == service) { group->removedServices.push_back(service); - std::remove(group->services.begin(), group->services.end(), service); + ServiceGroup::Store::iterator newend; + newend = std::remove(group->services.begin(), group->services.end(), service); + group->services.resize(newend-group->services.begin()); debugs(93, 5, "adaptation service " << service << " removed from group " << group->id); break; @@ -96,7 +98,9 @@ Adaptation::Config::removeService(const String& service) } if (services.empty()) { removeRule(group->id); - std::remove(AllGroups().begin(), AllGroups().end(), group); + Groups::iterator newend; + newend = std::remove(AllGroups().begin(), AllGroups().end(), group); + AllGroups().resize(newend-AllGroups().begin()); } else { ++i; } @@ -124,7 +128,9 @@ Adaptation::Config::removeRule(const String& id) AccessRule* rule = *it; if (rule->groupId == id) { debugs(93, 5, "removing access rules for:" << id); - std::remove(AllRules().begin(), AllRules().end(), rule); + AccessRules::iterator newend; + newend = std::remove(AllRules().begin(), AllRules().end(), rule); + AllRules().resize(newend-AllRules().begin()); delete (rule); break; }