diff options
| author | Boris Gjenero <boris.gjenero@gmail.com> | 2017-03-08 22:38:09 -0500 |
|---|---|---|
| committer | Michael Sevakis <jethead71@rockbox.org> | 2017-03-21 21:04:36 -0400 |
| commit | 05739efe8d9df2a83b983a86d07cb0715c6d19ee (patch) | |
| tree | 8b94d917f8b788ea56dcb28d9d069a1e64a6766d | |
| parent | 35d69c80a609d5533ad2ee0386bcdbc1a1f12443 (diff) | |
| download | rockbox-05739efe8d9df2a83b983a86d07cb0715c6d19ee.zip rockbox-05739efe8d9df2a83b983a86d07cb0715c6d19ee.tar.gz rockbox-05739efe8d9df2a83b983a86d07cb0715c6d19ee.tar.bz2 rockbox-05739efe8d9df2a83b983a86d07cb0715c6d19ee.tar.xz | |
Avoid having to wait for dircache builds if shut down too soon
When dircache scanning is happening in the background, the user
can shut down the device before it is complete. Then, reset_cache()
sets size to 0 before it is copied to last_size at the end of
build_volumes(). When saved last_size is zero, scanning happens in
the foreground during next startup.
Avoid shrinking the size if the build is suspended.
Change-Id: Ife133e0be0dc0dfd53a4de119f70dba014c7ee68
| -rw-r--r-- | firmware/common/dircache.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/firmware/common/dircache.c b/firmware/common/dircache.c index 42585e1..e8f149c 100644 --- a/firmware/common/dircache.c +++ b/firmware/common/dircache.c @@ -1884,10 +1884,12 @@ static void build_volumes(void) dircache.reserve_used = reserve_used; if (DIRCACHE_STUFFED(reserve_used)) - dircache.last_size = 0; /* reset */ - else if (dircache.size > dircache.last_size || - dircache.last_size - dircache.size > DIRCACHE_RESERVE) - dircache.last_size = dircache.size; + dircache.last_size = 0; /* reset */ + else if (dircache.size > dircache.last_size) + dircache.last_size = dircache.size; /* grow */ + else if (!dircache_runinfo.suspended && + dircache.last_size - dircache.size > DIRCACHE_RESERVE) + dircache.last_size = dircache.size; /* shrink if not suspended */ logf("Done, %ld KiB used", dircache.size / 1024); |