Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(586)

Issue 2845753002: Remove data race in WebDataRequest::CancelRequest. (Closed)

Created:
3 years, 8 months ago by Roger McFarlane (Chromium)
Modified:
3 years, 7 months ago
Reviewers:
Peter Kasting
CC:
chromium-reviews, rouslan+autofill_chromium.org, rogerm+autofillwatch_chromium.org, sebsg+autofillwatch_chromium.org, mathp+autofillwatch_chromium.org, vabr+watchlistautofill_chromium.org, estade+watch_chromium.org, eroman
Target Ref:
refs/heads/master
Project:
chromium
Visibility:
Public.

Description

Remove data race in WebDataRequest::CancelRequest. As an optimization, WebDataRequest::IsActive() was making an (intentionally) unguarded nullptr check on its manager_ pointer member in order to avoid doing some work if the request was cancelled (which would set the pointer to nullptr in an otherwise thread safe manner). TSAN (correctly) detected and reported this race. Given the latitude that an optimizing compiler is allowed in rewriting code, it's not clear that this can be proven to be a safe optimization... so, used atomic operations to protect accesses to the manager_ member. Additional related changes in this CL: * Make the other members of WebDataRequest constants. * Remove some thread safety debug checks that were validating the assumptions made by the optimization (which was removed). BUG=714789 Review-Url: https://codereview.chromium.org/2845753002 Cr-Commit-Position: refs/heads/master@{#469821} Committed: https://chromium.googlesource.com/chromium/src/+/11cfe2438623a20f5ba74be863b6719b7525be18

Patch Set 1 #

Patch Set 2 : minor tweaks #

Patch Set 3 : BindOnce #

Patch Set 4 : use atomic ops #

Total comments: 15

Patch Set 5 : pkasting's comments #

Patch Set 6 : move static_assert #

Total comments: 2

Patch Set 7 : rebase #

Unified diffs Side-by-side diffs Delta from patch set Stats (+47 lines, -66 lines) Patch
M components/webdata/common/web_data_request_manager.h View 1 2 3 4 5 5 chunks +16 lines, -17 lines 0 comments Download
M components/webdata/common/web_data_request_manager.cc View 1 2 3 4 5 7 chunks +31 lines, -49 lines 0 comments Download

Dependent Patchsets:

Messages

Total messages: 39 (29 generated)
Roger McFarlane (Chromium)
PTAL? https://codereview.chromium.org/2845753002/diff/100001/components/webdata/common/web_data_request_manager.cc File components/webdata/common/web_data_request_manager.cc (right): https://codereview.chromium.org/2845753002/diff/100001/components/webdata/common/web_data_request_manager.cc#newcode138 components/webdata/common/web_data_request_manager.cc:138: DCHECK(i != pending_requests_.end()); The code in this block ...
3 years, 7 months ago (2017-04-27 20:51:44 UTC) #16
Peter Kasting
https://codereview.chromium.org/2845753002/diff/100001/components/webdata/common/web_data_request_manager.cc File components/webdata/common/web_data_request_manager.cc (left): https://codereview.chromium.org/2845753002/diff/100001/components/webdata/common/web_data_request_manager.cc#oldcode146 components/webdata/common/web_data_request_manager.cc:146: consumer = request->GetConsumer(); This isn't safe to remove. MarkAsInactive() ...
3 years, 7 months ago (2017-04-28 06:36:41 UTC) #17
Roger McFarlane (Chromium)
Thanks. Another look? https://codereview.chromium.org/2845753002/diff/100001/components/webdata/common/web_data_request_manager.cc File components/webdata/common/web_data_request_manager.cc (left): https://codereview.chromium.org/2845753002/diff/100001/components/webdata/common/web_data_request_manager.cc#oldcode146 components/webdata/common/web_data_request_manager.cc:146: consumer = request->GetConsumer(); On 2017/04/28 06:36:41, ...
3 years, 7 months ago (2017-04-28 15:06:13 UTC) #20
Roger McFarlane (Chromium)
On 2017/04/28 15:06:13, Roger McFarlane (Chromium) wrote: > Thanks. Another look? > > https://codereview.chromium.org/2845753002/diff/100001/components/webdata/common/web_data_request_manager.cc > ...
3 years, 7 months ago (2017-05-04 18:06:06 UTC) #27
Peter Kasting
LGTM (sorry, was OOO) https://codereview.chromium.org/2845753002/diff/100001/components/webdata/common/web_data_request_manager.cc File components/webdata/common/web_data_request_manager.cc (right): https://codereview.chromium.org/2845753002/diff/100001/components/webdata/common/web_data_request_manager.cc#newcode79 components/webdata/common/web_data_request_manager.cc:79: new WebDataRequest(this, consumer, next_request_handle_)); On ...
3 years, 7 months ago (2017-05-04 18:32:25 UTC) #28
Roger McFarlane (Chromium)
Thanks. https://codereview.chromium.org/2845753002/diff/100001/components/webdata/common/web_data_request_manager.cc File components/webdata/common/web_data_request_manager.cc (right): https://codereview.chromium.org/2845753002/diff/100001/components/webdata/common/web_data_request_manager.cc#newcode79 components/webdata/common/web_data_request_manager.cc:79: new WebDataRequest(this, consumer, next_request_handle_)); On 2017/05/04 18:32:25, Peter ...
3 years, 7 months ago (2017-05-05 18:58:49 UTC) #29
commit-bot: I haz the power
CQ is trying da patch. Follow status at: https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.org/2845753002/160001
3 years, 7 months ago (2017-05-05 19:00:01 UTC) #32
commit-bot: I haz the power
Try jobs failed on following builders: linux_android_rel_ng on master.tryserver.chromium.android (JOB_FAILED, https://build.chromium.org/p/tryserver.chromium.android/builders/linux_android_rel_ng/builds/286851)
3 years, 7 months ago (2017-05-05 21:50:17 UTC) #34
commit-bot: I haz the power
CQ is trying da patch. Follow status at: https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.org/2845753002/160001
3 years, 7 months ago (2017-05-05 22:04:41 UTC) #36
commit-bot: I haz the power
3 years, 7 months ago (2017-05-06 00:08:56 UTC) #39
Message was sent while issue was closed.
Committed patchset #7 (id:160001) as
https://chromium.googlesource.com/chromium/src/+/11cfe2438623a20f5ba74be863b6...

Powered by Google App Engine
This is Rietveld 408576698