Index: chrome/browser/nacl_host/pnacl_host.cc |
diff --git a/chrome/browser/nacl_host/pnacl_host.cc b/chrome/browser/nacl_host/pnacl_host.cc |
index 990ba9ec99e34f5ede71fa2febc6c17755c6eb09..2468f9d27cd0ef6177a7d29db09ae1a8f5384bcc 100644 |
--- a/chrome/browser/nacl_host/pnacl_host.cc |
+++ b/chrome/browser/nacl_host/pnacl_host.cc |
@@ -72,8 +72,9 @@ void PnaclHost::OnCacheInitialized(int net_error) { |
if (cache_state_ == CacheReady) |
return; |
if (net_error != net::OK) { |
- LOG(ERROR) << "PNaCl translation cache initalization failure: " << net_error |
- << "\n"; |
+ // This will cause the cache to attempt to re-init on the next call to |
+ // GetNexeFd. |
+ cache_state_ = CacheUninitialized; |
} else { |
cache_state_ = CacheReady; |
} |
@@ -120,8 +121,10 @@ base::PlatformFile PnaclHost::DoCreateTemporaryFile(base::FilePath temp_dir) { |
? file_util::CreateTemporaryFile(&file_path) |
: file_util::CreateTemporaryFileInDir(temp_dir, &file_path); |
- if (!rv) |
+ if (!rv) { |
+ LOG(ERROR) << "PnaclHost:: Temp file creation failed."; |
return base::kInvalidPlatformFileValue; |
+ } |
base::PlatformFileError error; |
base::PlatformFile file_handle(base::CreatePlatformFile( |
file_path, |
@@ -131,8 +134,10 @@ base::PlatformFile PnaclHost::DoCreateTemporaryFile(base::FilePath temp_dir) { |
NULL, |
&error)); |
- if (error != base::PLATFORM_FILE_OK) |
+ if (error != base::PLATFORM_FILE_OK) { |
+ LOG(ERROR) << "PnaclHost: Temp file open failed: " << error; |
return base::kInvalidPlatformFileValue; |
+ } |
return file_handle; |
} |
@@ -161,7 +166,7 @@ void PnaclHost::GetNexeFd(int render_process_id, |
if (cache_state_ == CacheUninitialized) { |
Init(); |
} |
- if (cache_state_ == CacheInitializing) { |
+ if (cache_state_ != CacheReady) { |
// If the backend hasn't yet initialized, try the request again later. |
BrowserThread::PostDelayedTask(BrowserThread::IO, |
FROM_HERE, |
@@ -230,6 +235,7 @@ void PnaclHost::OnCacheQueryReturn( |
DCHECK(thread_checker_.CalledOnValidThread()); |
PendingTranslationMap::iterator entry(pending_translations_.find(id)); |
if (entry == pending_translations_.end()) { |
+ LOG(ERROR) << "PnaclHost::OnCacheQueryReturn: id not found"; |
return; |
} |
PendingTranslation* pt = &entry->second; |
@@ -252,16 +258,20 @@ void PnaclHost::OnTempFileReturn(const TranslationID& id, |
if (entry == pending_translations_.end()) { |
// The renderer may have signaled an error or closed while the temp |
// file was being created. |
+ LOG(ERROR) << "PnaclHost::OnTempFileReturn: id not found"; |
BrowserThread::PostBlockingPoolTask( |
FROM_HERE, base::Bind(base::IgnoreResult(base::ClosePlatformFile), fd)); |
return; |
} |
if (fd == base::kInvalidPlatformFileValue) { |
+ // This translation will fail, but we need to retry any translation |
+ // waiting for its result. |
+ LOG(ERROR) << "PnaclHost::OnTempFileReturn: temp file creation failed"; |
std::string key(entry->second.cache_key); |
bool is_incognito = entry->second.is_incognito; |
entry->second.callback.Run(fd, false); |
pending_translations_.erase(entry); |
- // No translations will be blocked waiting for an incongnito translation |
+ // No translations will be waiting for an incongnito translation |
if (!is_incognito) |
RequeryMatchingTranslations(key); |
return; |
@@ -335,13 +345,16 @@ scoped_refptr<net::DrainableIOBuffer> PnaclHost::CopyFileToBuffer( |
bool error = false; |
if (!base::GetPlatformFileInfo(fd, &info) || |
info.size >= std::numeric_limits<int>::max()) { |
+ LOG(ERROR) << "PnaclHost: GetPlatformFileInfo failed"; |
error = true; |
} else { |
buffer = new net::DrainableIOBuffer( |
new net::IOBuffer(static_cast<int>(info.size)), info.size); |
if (base::ReadPlatformFile(fd, 0, buffer->data(), buffer->size()) != |
- info.size) |
+ info.size) { |
+ LOG(ERROR) << "PnaclHost: CopyFileToBuffer write failed"; |
error = true; |
+ } |
} |
if (error) { |
buffer = NULL; |