Index: net/http/http_server_properties_impl.cc |
diff --git a/net/http/http_server_properties_impl.cc b/net/http/http_server_properties_impl.cc |
index 77968ff7d6105a653b6f7746fee0713fe7e9a7ad..9ccf5089c608e7e606afba29fc1f931c8fd6006f 100644 |
--- a/net/http/http_server_properties_impl.cc |
+++ b/net/http/http_server_properties_impl.cc |
@@ -47,10 +47,24 @@ void HttpServerPropertiesImpl::InitializeSpdyServers( |
DCHECK(CalledOnValidThread()); |
if (!spdy_servers) |
return; |
+ |
// Add the entries from persisted data. |
+ SpdyServerHostPortMap spdy_servers_map(SpdyServerHostPortMap::NO_AUTO_EVICT); |
for (std::vector<std::string>::reverse_iterator it = spdy_servers->rbegin(); |
it != spdy_servers->rend(); ++it) { |
- spdy_servers_map_.Put(*it, support_spdy); |
+ spdy_servers_map.Put(*it, support_spdy); |
+ } |
+ |
+ // |spdy_servers_map| will have the memory cache. |
+ spdy_servers_map_.Swap(spdy_servers_map); |
+ |
+ // Add the entries from the memory cache. |
+ for (SpdyServerHostPortMap::reverse_iterator it = spdy_servers_map.rbegin(); |
+ it != spdy_servers_map.rend(); ++it) { |
+ // Add the entry if it is not in the cache, otherwise move it to the front |
+ // of recency list. |
+ if (spdy_servers_map_.Get(it->first) == spdy_servers_map_.end()) |
+ spdy_servers_map_.Put(it->first, it->second); |
} |
} |