diff options
author | Miika Pekkarinen <miipekk@ihme.org> | 2007-04-07 17:48:51 +0000 |
---|---|---|
committer | Miika Pekkarinen <miipekk@ihme.org> | 2007-04-07 17:48:51 +0000 |
commit | 7b1e827f0cf6930a61671c1c26aab8ed662b4134 (patch) | |
tree | 44627faf8f6b12bcbaf453763278748eb568628b /firmware | |
parent | 8e6e25c353e95e6566a7dfabbd2ca31b0b9db09e (diff) | |
download | rockbox-7b1e827f0cf6930a61671c1c26aab8ed662b4134.tar.gz rockbox-7b1e827f0cf6930a61671c1c26aab8ed662b4134.zip |
Dircache fixes: Stop scanning properly if shutdown is initiated. Require user to re-enable dircache if initialization fails. Don't create statefile unless eeprom settings have been initialized.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13060 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/common/dircache.c | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/firmware/common/dircache.c b/firmware/common/dircache.c index 023f00f848..e69ecf3d5c 100644 --- a/firmware/common/dircache.c +++ b/firmware/common/dircache.c | |||
@@ -405,7 +405,7 @@ static struct dircache_entry* dircache_get_entry(const char *path, | |||
405 | return cache_entry; | 405 | return cache_entry; |
406 | } | 406 | } |
407 | 407 | ||
408 | #if 1 | 408 | #ifdef HAVE_EEPROM_SETTINGS |
409 | /** | 409 | /** |
410 | * Function to load the internal cache structure from disk to initialize | 410 | * Function to load the internal cache structure from disk to initialize |
411 | * the dircache really fast and little disk access. | 411 | * the dircache really fast and little disk access. |
@@ -480,9 +480,6 @@ int dircache_save(void) | |||
480 | 480 | ||
481 | remove(DIRCACHE_FILE); | 481 | remove(DIRCACHE_FILE); |
482 | 482 | ||
483 | while (thread_enabled) | ||
484 | sleep(1); | ||
485 | |||
486 | if (!dircache_initialized) | 483 | if (!dircache_initialized) |
487 | return -1; | 484 | return -1; |
488 | 485 | ||
@@ -718,7 +715,7 @@ bool dircache_is_enabled(void) | |||
718 | */ | 715 | */ |
719 | bool dircache_is_initializing(void) | 716 | bool dircache_is_initializing(void) |
720 | { | 717 | { |
721 | return dircache_initializing; | 718 | return dircache_initializing || thread_enabled; |
722 | } | 719 | } |
723 | 720 | ||
724 | /** | 721 | /** |
@@ -835,7 +832,7 @@ void dircache_copy_path(const struct dircache_entry *entry, char *buf, int size) | |||
835 | static int block_until_ready(void) | 832 | static int block_until_ready(void) |
836 | { | 833 | { |
837 | /* Block until dircache has been built. */ | 834 | /* Block until dircache has been built. */ |
838 | while (!dircache_initialized && dircache_initializing) | 835 | while (!dircache_initialized && dircache_is_initializing()) |
839 | sleep(1); | 836 | sleep(1); |
840 | 837 | ||
841 | if (!dircache_initialized) | 838 | if (!dircache_initialized) |
@@ -918,7 +915,7 @@ void dircache_bind(int fd, const char *path) | |||
918 | struct dircache_entry *entry; | 915 | struct dircache_entry *entry; |
919 | 916 | ||
920 | /* Queue requests until dircache has been built. */ | 917 | /* Queue requests until dircache has been built. */ |
921 | if (!dircache_initialized && dircache_initializing) | 918 | if (!dircache_initialized && dircache_is_initializing()) |
922 | { | 919 | { |
923 | if (fdbind_idx >= MAX_PENDING_BINDINGS) | 920 | if (fdbind_idx >= MAX_PENDING_BINDINGS) |
924 | return ; | 921 | return ; |