forked from len0rd/rockbox
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)
|
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)
|
if (clear)
|
||||||
|
|
|
||||||
|
|
@ -1348,7 +1348,8 @@ void tree_flush(void)
|
||||||
{
|
{
|
||||||
global_status.dircache_size = dircache_get_cache_size();
|
global_status.dircache_size = dircache_get_cache_size();
|
||||||
# ifdef HAVE_EEPROM_SETTINGS
|
# ifdef HAVE_EEPROM_SETTINGS
|
||||||
dircache_save();
|
if (firmware_settings.initialized)
|
||||||
|
dircache_save();
|
||||||
# endif
|
# endif
|
||||||
dircache_disable();
|
dircache_disable();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -405,7 +405,7 @@ static struct dircache_entry* dircache_get_entry(const char *path,
|
||||||
return cache_entry;
|
return cache_entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 1
|
#ifdef HAVE_EEPROM_SETTINGS
|
||||||
/**
|
/**
|
||||||
* Function to load the internal cache structure from disk to initialize
|
* Function to load the internal cache structure from disk to initialize
|
||||||
* the dircache really fast and little disk access.
|
* the dircache really fast and little disk access.
|
||||||
|
|
@ -480,9 +480,6 @@ int dircache_save(void)
|
||||||
|
|
||||||
remove(DIRCACHE_FILE);
|
remove(DIRCACHE_FILE);
|
||||||
|
|
||||||
while (thread_enabled)
|
|
||||||
sleep(1);
|
|
||||||
|
|
||||||
if (!dircache_initialized)
|
if (!dircache_initialized)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
|
@ -718,7 +715,7 @@ bool dircache_is_enabled(void)
|
||||||
*/
|
*/
|
||||||
bool dircache_is_initializing(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)
|
static int block_until_ready(void)
|
||||||
{
|
{
|
||||||
/* Block until dircache has been built. */
|
/* Block until dircache has been built. */
|
||||||
while (!dircache_initialized && dircache_initializing)
|
while (!dircache_initialized && dircache_is_initializing())
|
||||||
sleep(1);
|
sleep(1);
|
||||||
|
|
||||||
if (!dircache_initialized)
|
if (!dircache_initialized)
|
||||||
|
|
@ -918,7 +915,7 @@ void dircache_bind(int fd, const char *path)
|
||||||
struct dircache_entry *entry;
|
struct dircache_entry *entry;
|
||||||
|
|
||||||
/* Queue requests until dircache has been built. */
|
/* Queue requests until dircache has been built. */
|
||||||
if (!dircache_initialized && dircache_initializing)
|
if (!dircache_initialized && dircache_is_initializing())
|
||||||
{
|
{
|
||||||
if (fdbind_idx >= MAX_PENDING_BINDINGS)
|
if (fdbind_idx >= MAX_PENDING_BINDINGS)
|
||||||
return ;
|
return ;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue