mirror of
https://github.com/libretro/RetroArch
synced 2025-03-27 23:37:39 +00:00
(Database) Fix database runloop on data runloop
This commit is contained in:
parent
f5470d37b2
commit
b7321df63c
@ -61,8 +61,8 @@ static int zlib_compare_crc32(const char *name, const char *valid_exts,
|
|||||||
database_info_rdl_handle_t *database_info_write_rdl_init(const char *dir)
|
database_info_rdl_handle_t *database_info_write_rdl_init(const char *dir)
|
||||||
{
|
{
|
||||||
const char *exts = "";
|
const char *exts = "";
|
||||||
|
global_t *global = global_get_ptr();
|
||||||
database_info_rdl_handle_t *dbl = (database_info_rdl_handle_t*)calloc(1, sizeof(*dbl));
|
database_info_rdl_handle_t *dbl = (database_info_rdl_handle_t*)calloc(1, sizeof(*dbl));
|
||||||
global_t *global = global_get_ptr();
|
|
||||||
|
|
||||||
if (!dbl)
|
if (!dbl)
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -71,11 +71,19 @@ database_info_rdl_handle_t *database_info_write_rdl_init(const char *dir)
|
|||||||
exts = core_info_list_get_all_extensions(global->core_info);
|
exts = core_info_list_get_all_extensions(global->core_info);
|
||||||
|
|
||||||
dbl->list = dir_list_new(dir, exts, false);
|
dbl->list = dir_list_new(dir, exts, false);
|
||||||
|
|
||||||
|
if (!dbl->list)
|
||||||
|
goto error;
|
||||||
|
|
||||||
dbl->list_ptr = 0;
|
dbl->list_ptr = 0;
|
||||||
dbl->blocking = false;
|
dbl->status = DATABASE_RDL_ITERATE;
|
||||||
dbl->iterating = true;
|
|
||||||
|
|
||||||
return dbl;
|
return dbl;
|
||||||
|
|
||||||
|
error:
|
||||||
|
if (dbl)
|
||||||
|
free(dbl);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void database_info_write_rdl_free(database_info_rdl_handle_t *dbl)
|
void database_info_write_rdl_free(database_info_rdl_handle_t *dbl)
|
||||||
@ -96,14 +104,6 @@ int database_info_write_rdl_iterate(database_info_rdl_handle_t *dbl)
|
|||||||
|
|
||||||
if (!dbl || !dbl->list)
|
if (!dbl || !dbl->list)
|
||||||
return -1;
|
return -1;
|
||||||
if (dbl->blocking)
|
|
||||||
return 1;
|
|
||||||
if (dbl->list_ptr < dbl->list->size) {}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
dbl->iterating = false;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
name = dbl->list->elems[dbl->list_ptr].data;
|
name = dbl->list->elems[dbl->list_ptr].data;
|
||||||
|
|
||||||
|
@ -27,10 +27,16 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
enum database_rdl_action_type
|
||||||
|
{
|
||||||
|
DATABASE_RDL_NONE = 0,
|
||||||
|
DATABASE_RDL_ITERATE,
|
||||||
|
DATABASE_RDL_FREE,
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
bool blocking;
|
enum database_rdl_action_type status;
|
||||||
bool iterating;
|
|
||||||
size_t list_ptr;
|
size_t list_ptr;
|
||||||
struct string_list *list;
|
struct string_list *list;
|
||||||
} database_info_rdl_handle_t;
|
} database_info_rdl_handle_t;
|
||||||
|
@ -595,7 +595,7 @@ static int action_iterate_main(const char *label, unsigned action)
|
|||||||
|
|
||||||
case MENU_ACTION_TEST:
|
case MENU_ACTION_TEST:
|
||||||
#if 0
|
#if 0
|
||||||
menu->rdl = database_info_write_rdl_init("/home/twinaphex/roms");
|
menu->rdl = database_info_write_rdl_init("/home/squarepusher/roms");
|
||||||
|
|
||||||
if (!menu->rdl)
|
if (!menu->rdl)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -646,34 +646,36 @@ static int rarch_main_data_nbio_iterate_parse(nbio_handle_t *nbio)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBRETRODB
|
||||||
#ifdef HAVE_MENU
|
#ifdef HAVE_MENU
|
||||||
static void rarch_main_data_db_iterate(bool is_thread,
|
static void rarch_main_data_db_iterate(bool is_thread,
|
||||||
data_runloop_t *runloop)
|
data_runloop_t *runloop)
|
||||||
{
|
{
|
||||||
driver_t *driver = driver_get_ptr();
|
driver_t *driver = driver_get_ptr();
|
||||||
|
menu_handle_t *menu = menu_driver_get_ptr();
|
||||||
|
database_info_rdl_handle_t *dbl = menu ? menu->rdl : NULL;
|
||||||
|
|
||||||
if (!driver || !driver->menu || !driver->menu->rdl)
|
if (!dbl)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (driver->menu->rdl->blocking)
|
switch (dbl->status)
|
||||||
{
|
{
|
||||||
/* Do nonblocking I/O transfers here. */
|
case DATABASE_RDL_NONE:
|
||||||
return;
|
break;
|
||||||
|
case DATABASE_RDL_ITERATE:
|
||||||
|
if (dbl->list_ptr < dbl->list->size)
|
||||||
|
database_info_write_rdl_iterate(dbl);
|
||||||
|
else
|
||||||
|
dbl->status = DATABASE_RDL_FREE;
|
||||||
|
break;
|
||||||
|
case DATABASE_RDL_FREE:
|
||||||
|
database_info_write_rdl_free(dbl);
|
||||||
|
dbl = NULL;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_LIBRETRODB
|
|
||||||
if (!driver->menu->rdl->iterating)
|
|
||||||
{
|
|
||||||
database_info_write_rdl_free(driver->menu->rdl);
|
|
||||||
driver->menu->rdl = NULL;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
database_info_write_rdl_iterate(driver->menu->rdl);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static void rarch_main_data_nbio_image_iterate(bool is_thread,
|
static void rarch_main_data_nbio_image_iterate(bool is_thread,
|
||||||
@ -902,9 +904,12 @@ static void data_runloop_iterate(bool is_thread, data_runloop_t *runloop)
|
|||||||
#ifdef HAVE_NETWORKING
|
#ifdef HAVE_NETWORKING
|
||||||
rarch_main_data_http_iterate (is_thread, runloop);
|
rarch_main_data_http_iterate (is_thread, runloop);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_MENU
|
#ifdef HAVE_MENU
|
||||||
|
#ifdef HAVE_LIBRETRODB
|
||||||
rarch_main_data_db_iterate (is_thread, runloop);
|
rarch_main_data_db_iterate (is_thread, runloop);
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_THREADS
|
#ifdef HAVE_THREADS
|
||||||
|
Loading…
x
Reference in New Issue
Block a user