From 7b1e827f0cf6930a61671c1c26aab8ed662b4134 Mon Sep 17 00:00:00 2001 From: Miika Pekkarinen Date: Sat, 7 Apr 2007 17:48:51 +0000 Subject: 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 --- firmware/common/dircache.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) (limited to 'firmware/common') 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, return cache_entry; } -#if 1 +#ifdef HAVE_EEPROM_SETTINGS /** * Function to load the internal cache structure from disk to initialize * the dircache really fast and little disk access. @@ -480,9 +480,6 @@ int dircache_save(void) remove(DIRCACHE_FILE); - while (thread_enabled) - sleep(1); - if (!dircache_initialized) return -1; @@ -718,7 +715,7 @@ bool dircache_is_enabled(void) */ bool dircache_is_initializing(void) { - return dircache_initializing; + return dircache_initializing || thread_enabled; } /** @@ -835,7 +832,7 @@ void dircache_copy_path(const struct dircache_entry *entry, char *buf, int size) static int block_until_ready(void) { /* Block until dircache has been built. */ - while (!dircache_initialized && dircache_initializing) + while (!dircache_initialized && dircache_is_initializing()) sleep(1); if (!dircache_initialized) @@ -918,7 +915,7 @@ void dircache_bind(int fd, const char *path) struct dircache_entry *entry; /* Queue requests until dircache has been built. */ - if (!dircache_initialized && dircache_initializing) + if (!dircache_initialized && dircache_is_initializing()) { if (fdbind_idx >= MAX_PENDING_BINDINGS) return ; -- cgit v1.2.3