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
This commit is contained in:
parent
8e6e25c353
commit
7b1e827f0c
3 changed files with 14 additions and 9 deletions
|
@ -172,7 +172,14 @@ static int init_dircache(bool preinit)
|
|||
}
|
||||
|
||||
if (result < 0)
|
||||
gui_syncsplash(0, "Failed! Result: %d", result);
|
||||
{
|
||||
/* Initialization of dircache failed. Manual action is
|
||||
* necessary to enable dircache again.
|
||||
*/
|
||||
gui_syncsplash(0, "Dircache failed, disabled. Result: %d", result);
|
||||
global_settings.dircache = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (clear)
|
||||
|
|
|
@ -1348,7 +1348,8 @@ void tree_flush(void)
|
|||
{
|
||||
global_status.dircache_size = dircache_get_cache_size();
|
||||
# ifdef HAVE_EEPROM_SETTINGS
|
||||
dircache_save();
|
||||
if (firmware_settings.initialized)
|
||||
dircache_save();
|
||||
# endif
|
||||
dircache_disable();
|
||||
}
|
||||
|
|
|
@ -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 ;
|
||||
|
|
Loading…
Reference in a new issue