Index: net/spdy/spdy_session_pool.cc |
diff --git a/net/spdy/spdy_session_pool.cc b/net/spdy/spdy_session_pool.cc |
index 66d907dbda439918c8228675b6659d1489cb0792..d523e10198660129645de75a7b25483bc44150e0 100644 |
--- a/net/spdy/spdy_session_pool.cc |
+++ b/net/spdy/spdy_session_pool.cc |
@@ -278,11 +278,14 @@ void SpdySessionPool::OnIPAddressChanged() { |
if (!*it) |
continue; |
- // For OSs that terminate TCP connections upon relevant network changes |
- // there is no need to explicitly close SpdySessions, instead simply mark |
- // the sessions as deprecated so they aren't reused. |
+// For OSs that terminate TCP connections upon relevant network changes, |
+// attempt to preserve active streams by marking all sessions as going |
+// away, rather than explicitly closing them. Streams may still fail due |
+// to a generated TCP reset. |
#if defined(OS_ANDROID) || defined(OS_WIN) || defined(OS_IOS) |
(*it)->MakeUnavailable(); |
+ (*it)->StartGoingAway(kLastStreamId, OK); |
+ (*it)->MaybeFinishGoingAway(); |
#else |
(*it)->CloseSessionOnError(ERR_NETWORK_CHANGED, |
"Closing current sessions."); |