]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
If we do underflow the know usage of a storage, recalculate it
authorteor <teor2345@gmail.com>
Sun, 28 May 2017 12:28:56 +0000 (22:28 +1000)
committerteor <teor2345@gmail.com>
Sun, 28 May 2017 12:34:43 +0000 (22:34 +1000)
Fixes bug #22424 on 0.3.1.1-alpha.

src/common/storagedir.c

index cc2230d5022b975fce1c9355a134456ea9785b2b..befcfe693fcdcbb04d5c3cfe0c2a77217443700b 100644 (file)
@@ -418,6 +418,16 @@ storage_dir_reduce_usage(storage_dir_t *d, uint64_t removed_file_size)
        * actual usage (rather than relaying on cached usage), and the call to
        * this function. */
       d->usage -= removed_file_size;
+    } else {
+      /* If we underflowed the cached directory size, re-check the sizes of all
+       * the files in the directory. This makes storage_dir_shrink() quadratic,
+       * but only if a process is continually changing file sizes in the
+       * storage directory (in which case, we have bigger issues).
+       *
+       * We can't just reset usage_known, because storage_dir_shrink() relies
+       * on knowing the usage. */
+      storage_dir_rescan(d);
+      (void)storage_dir_get_usage(d);
     }
   }
 }