Преглед изворни кода

MultiDiskAdaptor: Handle short read

Tatsuhiro Tsujikawa пре 11 година
родитељ
комит
a3426821c8
1 измењених фајлова са 15 додато и 5 уклоњено
  1. 15 5
      src/MultiDiskAdaptor.cc

+ 15 - 5
src/MultiDiskAdaptor.cc

@@ -389,12 +389,22 @@ ssize_t MultiDiskAdaptor::readData
     if(!(*i)->isOpen()) {
       throwOnDiskWriterNotOpened((*i).get(), offset+(len-rem));
     }
-    totalReadLength +=
-      (*i)->getDiskWriter()->readData(data+(len-rem), readLength, fileOffset);
-    rem -= readLength;
-    if(dropCache) {
-      (*i)->getDiskWriter()->dropCache(readLength, fileOffset);
+
+    while(readLength > 0) {
+      auto nread = (*i)->getDiskWriter()->readData(data+(len-rem),
+                                                   readLength, fileOffset);
+
+      totalReadLength += nread;
+
+      if(dropCache) {
+        (*i)->getDiskWriter()->dropCache(nread, fileOffset);
+      }
+
+      readLength -= nread;
+      rem -= nread;
+      fileOffset += nread;
     }
+
     fileOffset = 0;
     if(rem == 0) {
       break;