Bug 1276920 - Limit number of tries to find unused file name for doomed entry file, r=honzab a=sylvestre
--- a/netwerk/cache2/CacheFileIOManager.cpp
+++ b/netwerk/cache2/CacheFileIOManager.cpp
@@ -3589,35 +3589,38 @@ CacheFileIOManager::GetDoomedFile(nsIFil
NS_ENSURE_SUCCESS(rv, rv);
rv = file->AppendNative(NS_LITERAL_CSTRING(DOOMED_DIR));
NS_ENSURE_SUCCESS(rv, rv);
rv = file->AppendNative(NS_LITERAL_CSTRING("dummyleaf"));
NS_ENSURE_SUCCESS(rv, rv);
+ const int32_t kMaxTries = 64;
srand(static_cast<unsigned>(PR_Now()));
nsAutoCString leafName;
- uint32_t iter=0;
- while (true) {
- iter++;
+ for (int32_t triesCount = 0; ; ++triesCount) {
leafName.AppendInt(rand());
rv = file->SetNativeLeafName(leafName);
NS_ENSURE_SUCCESS(rv, rv);
bool exists;
if (NS_SUCCEEDED(file->Exists(&exists)) && !exists) {
break;
}
+ if (triesCount == kMaxTries) {
+ LOG(("CacheFileIOManager::GetDoomedFile() - Could not find unused file "
+ "name in %d tries.", kMaxTries));
+ return NS_ERROR_FAILURE;
+ }
+
leafName.Truncate();
}
-// Telemetry::Accumulate(Telemetry::DISK_CACHE_GETDOOMEDFILE_ITERATIONS, iter);
-
file.swap(*_retval);
return NS_OK;
}
nsresult
CacheFileIOManager::IsEmptyDirectory(nsIFile *aFile, bool *_retval)
{
MOZ_ASSERT(mIOThread->IsCurrentThread());