Loaders: Add cancelation to all file loaders.

Mainly, for HTTP which might be stalled trying to connect (especially if
you're not near your PC right now and it's in your recent, for example.)
This commit is contained in:
Unknown W. Brackets committed 2017-12-09 16:47:37 -08:00
1 parent 6e3cb0cd48
commit ee5b68f1fc
11 files changed
+87 -43

No files matched your search

+12 -11
View File
@@ -41,19 +41,16 @@ std::mutex DiskCachingFileLoader::cachesMutex_;
// Takes ownership of backend.
DiskCachingFileLoader::DiskCachingFileLoader(FileLoader *backend)
: prepared_(false), filesize_(0), backend_(backend), cache_(nullptr) {
: backend_(backend) {
}
void DiskCachingFileLoader::Prepare() {
if (prepared_) {
return;
}
prepared_ = true;
filesize_ = backend_->FileSize();
if (filesize_ > 0) {
InitCache();
}
std::call_once(preparedFlag_, [this]() {
filesize_ = backend_->FileSize();
if (filesize_ > 0) {
InitCache();
}
});
}
DiskCachingFileLoader::~DiskCachingFileLoader() {
@@ -118,6 +115,10 @@ size_t DiskCachingFileLoader::ReadAt(s64 absolutePos, size_t bytes, void *data,
return readSize;
}
void DiskCachingFileLoader::Cancel() {
backend_->Cancel();
}
std::vector<std::string> DiskCachingFileLoader::GetCachedPathsInUse() {
std::lock_guard<std::mutex> guard(cachesMutex_);
@@ -156,7 +157,7 @@ void DiskCachingFileLoader::ShutdownCache() {
}
DiskCachingFileLoaderCache::DiskCachingFileLoaderCache(const std::string &path, u64 filesize)
: refCount_(0), filesize_(filesize), origPath_(path), f_(nullptr), fd_(0) {
: filesize_(filesize), origPath_(path) {
InitCache(path);
}