Cleanup task_database_handler

This commit is contained in:
twinaphex 2016-09-29 10:55:50 +02:00
parent 7e1639f33b
commit b286703a81
1 changed files with 44 additions and 21 deletions

View File

@ -493,11 +493,13 @@ static int task_database_iterate_serial_lookup(
static int task_database_iterate(database_state_handle_t *db_state, static int task_database_iterate(database_state_handle_t *db_state,
database_info_handle_t *db) database_info_handle_t *db)
{ {
const char *name = db ? db->list->elems[db->list_ptr].data : NULL; const char *name = NULL;
if (!db || !db->list) if (!db || !db->list)
return -1; return -1;
name = db->list->elems[db->list_ptr].data;
if (!name) if (!name)
return 0; return 0;
@ -538,12 +540,21 @@ static void task_database_cleanup_state(
static void task_database_handler(retro_task_t *task) static void task_database_handler(retro_task_t *task)
{ {
settings_t *settings = config_get_ptr(); const char *name = NULL;
db_handle_t *db = (db_handle_t*)task->state; database_info_handle_t *dbinfo = NULL;
database_info_handle_t *dbinfo = db->handle; database_state_handle_t *dbstate = NULL;
database_state_handle_t *dbstate = &db->state; db_handle_t *db = NULL;
const char *name = dbinfo ?
dbinfo->list->elems[dbinfo->list_ptr].data : NULL; if (!task)
goto task_finished;
db = (db_handle_t*)task->state;
if (!db)
goto task_finished;
dbinfo = db->handle;
dbstate = &db->state;
if (!dbinfo || task->cancelled) if (!dbinfo || task->cancelled)
goto task_finished; goto task_finished;
@ -551,13 +562,17 @@ static void task_database_handler(retro_task_t *task)
switch (dbinfo->status) switch (dbinfo->status)
{ {
case DATABASE_STATUS_ITERATE_BEGIN: case DATABASE_STATUS_ITERATE_BEGIN:
{
settings_t *settings = config_get_ptr();
if (dbstate && !dbstate->list) if (dbstate && !dbstate->list)
dbstate->list = dir_list_new_special( dbstate->list = dir_list_new_special(
settings->path.content_database, settings->path.content_database,
DIR_LIST_DATABASES, NULL); DIR_LIST_DATABASES, NULL);
}
dbinfo->status = DATABASE_STATUS_ITERATE_START; dbinfo->status = DATABASE_STATUS_ITERATE_START;
break; break;
case DATABASE_STATUS_ITERATE_START: case DATABASE_STATUS_ITERATE_START:
name = dbinfo->list->elems[dbinfo->list_ptr].data;
task_database_cleanup_state(dbstate); task_database_cleanup_state(dbstate);
dbstate->list_index = 0; dbstate->list_index = 0;
dbstate->entry_index = 0; dbstate->entry_index = 0;
@ -592,19 +607,27 @@ static void task_database_handler(retro_task_t *task)
return; return;
task_finished: task_finished:
if (task)
task->finished = true; task->finished = true;
if (dbstate)
{
if (dbstate->list) if (dbstate->list)
dir_list_free(dbstate->list); dir_list_free(dbstate->list);
}
if (db)
{
if (db->state.buf) if (db->state.buf)
free(db->state.buf); free(db->state.buf);
if (db->handle) if (db->handle)
database_info_free(db->handle); database_info_free(db->handle);
free(dbinfo);
free(db); free(db);
}
if (dbinfo)
free(dbinfo);
} }
bool task_push_dbscan(const char *fullpath, bool task_push_dbscan(const char *fullpath,