|
@@ -0,0 +1,41 @@
|
|
|
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
+From: Kenichi Ishibashi <[email protected]>
|
|
|
+Date: Sat, 8 Apr 2023 04:16:50 +0000
|
|
|
+Subject: Check SpdyProxyClientSocket is alive after write callback
|
|
|
+
|
|
|
+To ensure that we don't use any member field.
|
|
|
+
|
|
|
+(cherry picked from commit b71541b22ca19d5c3a7c01fedffe521b26577b72)
|
|
|
+
|
|
|
+Bug: 1428820
|
|
|
+Change-Id: Icf6677c652a47dc2fd2d01675e94cda031a015f2
|
|
|
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4394863
|
|
|
+Reviewed-by: Adam Rice <[email protected]>
|
|
|
+Commit-Queue: Kenichi Ishibashi <[email protected]>
|
|
|
+Cr-Original-Commit-Position: refs/heads/main@{#1125634}
|
|
|
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4410322
|
|
|
+Commit-Queue: Rubber Stamper <[email protected]>
|
|
|
+Auto-Submit: Kenichi Ishibashi <[email protected]>
|
|
|
+Bot-Commit: Rubber Stamper <[email protected]>
|
|
|
+Cr-Commit-Position: refs/branch-heads/5615@{#1172}
|
|
|
+Cr-Branched-From: 9c6408ef696e83a9936b82bbead3d41c93c82ee4-refs/heads/main@{#1109224}
|
|
|
+
|
|
|
+diff --git a/net/spdy/spdy_proxy_client_socket.cc b/net/spdy/spdy_proxy_client_socket.cc
|
|
|
+index 5af712b05af47bd207e9ef3fb9fe33342d152be0..73ca8d0c2958e532ac9810f5de40405d6e91cdeb 100644
|
|
|
+--- a/net/spdy/spdy_proxy_client_socket.cc
|
|
|
++++ b/net/spdy/spdy_proxy_client_socket.cc
|
|
|
+@@ -278,7 +278,14 @@ int SpdyProxyClientSocket::GetLocalAddress(IPEndPoint* address) const {
|
|
|
+
|
|
|
+ void SpdyProxyClientSocket::RunWriteCallback(int result) {
|
|
|
+ CHECK(write_callback_);
|
|
|
++
|
|
|
++ base::WeakPtr<SpdyProxyClientSocket> weak_ptr = weak_factory_.GetWeakPtr();
|
|
|
+ std::move(write_callback_).Run(result);
|
|
|
++ if (!weak_ptr) {
|
|
|
++ // `this` was already destroyed while running `write_callback_`. Must
|
|
|
++ // return immediately without touching any field member.
|
|
|
++ return;
|
|
|
++ }
|
|
|
+
|
|
|
+ if (end_stream_state_ == EndStreamState::kEndStreamReceived) {
|
|
|
+ base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask(
|