Set the net::LOAD_IGNORE_LIMITS flag when executing synchronous load requests to avoid a deadlock in SyncRequestProxy (issue #192).
git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@268 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
parent
c509581239
commit
b2100d27bd
|
@ -102,6 +102,7 @@ struct RequestParams {
|
||||||
int appcache_host_id;
|
int appcache_host_id;
|
||||||
bool download_to_file;
|
bool download_to_file;
|
||||||
scoped_refptr<net::UploadData> upload;
|
scoped_refptr<net::UploadData> upload;
|
||||||
|
net::RequestPriority priority;
|
||||||
};
|
};
|
||||||
|
|
||||||
// The interval for calls to RequestProxy::MaybeUpdateUploadProgress
|
// The interval for calls to RequestProxy::MaybeUpdateUploadProgress
|
||||||
|
@ -147,6 +148,8 @@ class RequestProxy : public net::URLRequest::Delegate,
|
||||||
peer_ = peer;
|
peer_ = peer;
|
||||||
owner_loop_ = MessageLoop::current();
|
owner_loop_ = MessageLoop::current();
|
||||||
|
|
||||||
|
InitializeParams(params);
|
||||||
|
|
||||||
// proxy over to the io thread
|
// proxy over to the io thread
|
||||||
CefThread::PostTask(CefThread::IO, FROM_HERE, NewRunnableMethod(
|
CefThread::PostTask(CefThread::IO, FROM_HERE, NewRunnableMethod(
|
||||||
this, &RequestProxy::AsyncStart, params));
|
this, &RequestProxy::AsyncStart, params));
|
||||||
|
@ -171,6 +174,10 @@ class RequestProxy : public net::URLRequest::Delegate,
|
||||||
DCHECK(!request_.get() || CefThread::CurrentlyOn(CefThread::IO));
|
DCHECK(!request_.get() || CefThread::CurrentlyOn(CefThread::IO));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual void InitializeParams(RequestParams* params) {
|
||||||
|
params->priority = net::MEDIUM;
|
||||||
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
// The following methods are called on the owner's thread in response to
|
// The following methods are called on the owner's thread in response to
|
||||||
// various net::URLRequest callbacks. The event hooks, defined below, trigger
|
// various net::URLRequest callbacks. The event hooks, defined below, trigger
|
||||||
|
@ -495,6 +502,7 @@ class RequestProxy : public net::URLRequest::Delegate,
|
||||||
}
|
}
|
||||||
|
|
||||||
request_.reset(new net::URLRequest(params->url, this));
|
request_.reset(new net::URLRequest(params->url, this));
|
||||||
|
request_->set_priority(params->priority);
|
||||||
request_->set_method(params->method);
|
request_->set_method(params->method);
|
||||||
request_->set_first_party_for_cookies(params->first_party_for_cookies);
|
request_->set_first_party_for_cookies(params->first_party_for_cookies);
|
||||||
request_->set_referrer(params->referrer.spec());
|
request_->set_referrer(params->referrer.spec());
|
||||||
|
@ -886,6 +894,14 @@ class SyncRequestProxy : public RequestProxy {
|
||||||
event_.Signal();
|
event_.Signal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void InitializeParams(RequestParams* params) {
|
||||||
|
// For synchronous requests ignore load limits to avoid a deadlock problem
|
||||||
|
// in SyncRequestProxy (issue #192).
|
||||||
|
params->load_flags |= net::LOAD_IGNORE_LIMITS;
|
||||||
|
params->priority = net::HIGHEST;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ResourceLoaderBridge::SyncLoadResponse* result_;
|
ResourceLoaderBridge::SyncLoadResponse* result_;
|
||||||
base::WaitableEvent event_;
|
base::WaitableEvent event_;
|
||||||
|
|
|
@ -36,10 +36,6 @@ void CefProcessIOThread::Init() {
|
||||||
CoInitialize(NULL);
|
CoInitialize(NULL);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Increase max sockets per group as a workaround for the SyncRequestProxy
|
|
||||||
// deadlock problem (issue #192).
|
|
||||||
net::ClientSocketPoolManager::set_max_sockets_per_group(15);
|
|
||||||
|
|
||||||
FilePath cache_path(_Context->cache_path());
|
FilePath cache_path(_Context->cache_path());
|
||||||
request_context_ = new BrowserRequestContext(cache_path,
|
request_context_ = new BrowserRequestContext(cache_path,
|
||||||
net::HttpCache::NORMAL, false);
|
net::HttpCache::NORMAL, false);
|
||||||
|
|
Loading…
Reference in New Issue