From 5f1e9dd822115e8dc5d66d94ef4f73c41fcbf90b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Thu, 9 Mar 2017 11:01:30 +0100 Subject: [PATCH] StorageFileLoader: More safety --- UWP/StorageFileLoader.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/UWP/StorageFileLoader.cpp b/UWP/StorageFileLoader.cpp index 85d5c94358..11a9fcb930 100644 --- a/UWP/StorageFileLoader.cpp +++ b/UWP/StorageFileLoader.cpp @@ -151,7 +151,7 @@ size_t StorageFileLoader::Read(size_t bytes, size_t count, void *data, Flags fla size_t StorageFileLoader::ReadAt(s64 absolutePos, size_t bytes, size_t count, void *data, Flags flags) { EnsureOpen(); - if (operationRequested_) + if (operationRequested_ || responseAvailable_) Crash(); { std::unique_lock lock(mutex_); @@ -165,7 +165,12 @@ size_t StorageFileLoader::ReadAt(s64 absolutePos, size_t bytes, size_t count, vo // OK, now wait for response... { std::unique_lock responseLock(mutexResponse_); - condResponse_.wait(responseLock); + while (!responseAvailable_) { + condResponse_.wait(responseLock); + } + if (operationFailed_) { + return 0; + } DataReader ^rd = DataReader::FromBuffer(response_.buffer); size_t len = response_.buffer->Length; Platform::Array ^bytearray = ref new Platform::Array((unsigned int)len);