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

Side by Side Diff: ios/web/public/test/http_server.mm

Issue 2794933002: Relax DCHECKs regarding Threads and RefCounts in iOS' HttpServer. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "ios/web/public/test/http_server.h" 5 #import "ios/web/public/test/http_server.h"
6 6
7 #import <Foundation/Foundation.h> 7 #import <Foundation/Foundation.h>
8 8
9 #include <string> 9 #include <string>
10 10
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 for (std::unique_ptr<ResponseProvider>& provider : response_providers) 73 for (std::unique_ptr<ResponseProvider>& provider : response_providers)
74 server.AddResponseProvider(std::move(provider)); 74 server.AddResponseProvider(std::move(provider));
75 return server; 75 return server;
76 } 76 }
77 77
78 void HttpServer::InitHttpServer() { 78 void HttpServer::InitHttpServer() {
79 DCHECK(gcd_web_server_); 79 DCHECK(gcd_web_server_);
80 // Note: This block is called from an arbitrary GCD thread. 80 // Note: This block is called from an arbitrary GCD thread.
81 id process_request = 81 id process_request =
82 ^GCDWebServerResponse*(GCDWebServerDataRequest* request) { 82 ^GCDWebServerResponse*(GCDWebServerDataRequest* request) {
83
84 // TODO(crbug.com/707764): Verify that the relaxation of the cross-thread
sdefresne 2017/04/03 14:18:16 I think that a correct fix would be to: 1. split
85 // access restriction is correct.
86 base::ScopedAllowCrossThreadRefCountAccess
87 allow_cross_thread_ref_count_access;
88
83 ResponseProvider::Request provider_request = 89 ResponseProvider::Request provider_request =
84 ResponseProviderRequestFromGCDWebServerRequest(request); 90 ResponseProviderRequestFromGCDWebServerRequest(request);
85 scoped_refptr<RefCountedResponseProviderWrapper> 91 scoped_refptr<RefCountedResponseProviderWrapper>
86 ref_counted_response_provider = GetResponseProviderForRequest( 92 ref_counted_response_provider = GetResponseProviderForRequest(
87 provider_request); 93 provider_request);
88 94
89 if (!ref_counted_response_provider) { 95 if (!ref_counted_response_provider) {
90 return [GCDWebServerResponse response]; 96 return [GCDWebServerResponse response];
91 } 97 }
92 ResponseProvider* response_provider = 98 ResponseProvider* response_provider =
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 break; 224 break;
219 } 225 }
220 } 226 }
221 if (found_iter != providers_.end()) { 227 if (found_iter != providers_.end()) {
222 providers_.erase(found_iter); 228 providers_.erase(found_iter);
223 } 229 }
224 } 230 }
225 231
226 void HttpServer::RemoveAllResponseProviders() { 232 void HttpServer::RemoveAllResponseProviders() {
227 DCHECK([NSThread isMainThread]); 233 DCHECK([NSThread isMainThread]);
234 // TODO(crbug.com/707764): Verify that the relaxation of the cross-thread
sdefresne 2017/04/03 14:18:16 I think you can change this to: // Relax the cr
235 // access restriction is correct.
236 base::ScopedAllowCrossThreadRefCountAccess
237 allow_cross_thread_ref_count_access;
228 base::AutoLock autolock(provider_list_lock_); 238 base::AutoLock autolock(provider_list_lock_);
229 providers_.clear(); 239 providers_.clear();
230 } 240 }
231 241
232 void HttpServer::SetPort(NSUInteger port) { 242 void HttpServer::SetPort(NSUInteger port) {
233 base::AutoLock autolock(port_lock_); 243 base::AutoLock autolock(port_lock_);
234 port_ = port; 244 port_ = port;
235 } 245 }
236 246
237 } // namespace test 247 } // namespace test
238 } // namespace web 248 } // namespace web
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698