StorageFileLoader: More safety

This commit is contained in:
Henrik Rydgård
2017-03-23 10:02:29 +01:00
parent 5880f37598
commit 5f1e9dd822
+7 -2
View File
@@ -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<std::mutex> 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<std::mutex> 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<uint8_t> ^bytearray = ref new Platform::Array<uint8_t>((unsigned int)len);