mirror of
https://github.com/libretro/RetroArch.git
synced 2025-04-02 10:51:52 -04:00
(tasks) Make task handles honor task->cancelled
This commit is contained in:
parent
0496bed76e
commit
29e9b87319
6 changed files with 48 additions and 10 deletions
|
@ -180,7 +180,7 @@ void input_overlay_set_scale_factor(float scale)
|
|||
input_overlay_set_vertex_geom();
|
||||
}
|
||||
|
||||
static void input_overlay_free_overlay(struct overlay *overlay)
|
||||
void input_overlay_free_overlay(struct overlay *overlay)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
|
@ -551,6 +551,9 @@ static void input_overlay_loaded(void *task_data, void *user_data, const char *e
|
|||
input_overlay_t *ol;
|
||||
driver_t *driver = driver_get_ptr();
|
||||
|
||||
if (err)
|
||||
return;
|
||||
|
||||
/* We can't display when the menu is up */
|
||||
if (settings->input.overlay_hide_in_menu && menu_driver_alive())
|
||||
{
|
||||
|
|
|
@ -198,6 +198,7 @@ typedef struct
|
|||
**/
|
||||
void input_overlay_free(void);
|
||||
|
||||
void input_overlay_free_overlay(struct overlay *overlay);
|
||||
|
||||
/**
|
||||
* input_overlay_init
|
||||
|
|
|
@ -493,7 +493,7 @@ static void rarch_dbscan_task_handler(rarch_task_t *task)
|
|||
database_state_handle_t *dbstate = &db->state;
|
||||
const char *name = dbinfo ? dbinfo->list->elems[dbinfo->list_ptr].data : NULL;
|
||||
|
||||
if (!dbinfo)
|
||||
if (!dbinfo || task->cancelled)
|
||||
goto task_finished;
|
||||
|
||||
switch (dbinfo->status)
|
||||
|
|
|
@ -442,7 +442,7 @@ static void rarch_task_file_load_handler(rarch_task_t *task)
|
|||
break;
|
||||
}
|
||||
|
||||
if (nbio->is_finished && nbio->image.is_finished)
|
||||
if (nbio->is_finished && nbio->image.is_finished && !task->cancelled)
|
||||
{
|
||||
task->task_data = malloc(sizeof(nbio->image.ti));
|
||||
memcpy(task->task_data, &nbio->image.ti, sizeof(nbio->image.ti));
|
||||
|
@ -453,6 +453,13 @@ static void rarch_task_file_load_handler(rarch_task_t *task)
|
|||
if (nbio->is_finished)
|
||||
goto task_finished;
|
||||
|
||||
|
||||
if (task->cancelled)
|
||||
{
|
||||
task->error = strdup("Task canceled.");
|
||||
goto task_finished;
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
task_finished:
|
||||
|
|
|
@ -162,6 +162,9 @@ static void rarch_task_http_transfer_handler(rarch_task_t *task)
|
|||
break;
|
||||
}
|
||||
|
||||
if (task->cancelled)
|
||||
goto task_finished;
|
||||
|
||||
return;
|
||||
task_finished:
|
||||
task->finished = true;
|
||||
|
@ -174,14 +177,17 @@ task_finished:
|
|||
if (tmp && http->cb)
|
||||
http->cb(tmp, len);
|
||||
|
||||
if (net_http_error(http->handle))
|
||||
if (net_http_error(http->handle) || task->cancelled)
|
||||
{
|
||||
tmp = (char*)net_http_data(http->handle, &len, true);
|
||||
|
||||
if (tmp)
|
||||
free(tmp);
|
||||
|
||||
task->error = strdup("Download failed.");
|
||||
if (task->cancelled)
|
||||
task->error = strdup("Task cancelled.");
|
||||
else
|
||||
task->error = strdup("Download failed.");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -629,17 +629,38 @@ static void rarch_task_overlay_handler(rarch_task_t *task)
|
|||
goto task_finished;
|
||||
}
|
||||
|
||||
if (task->cancelled)
|
||||
goto task_finished;
|
||||
|
||||
return;
|
||||
task_finished:
|
||||
task->finished = true;
|
||||
|
||||
data = (overlay_task_data_t*)calloc(1, sizeof(*data));
|
||||
if (task->cancelled)
|
||||
{
|
||||
struct overlay *o;
|
||||
unsigned i;
|
||||
|
||||
data->overlays = loader->overlays;
|
||||
data->size = loader->size;
|
||||
data->active = loader->active;
|
||||
if (task->error)
|
||||
free(task->error);
|
||||
|
||||
task->task_data = data;
|
||||
task->error = strdup("Task cancelled.");
|
||||
|
||||
for (i = 0; i < loader->size; i++)
|
||||
input_overlay_free_overlay(&loader->overlays[i]);
|
||||
|
||||
free(loader->overlays);
|
||||
}
|
||||
else
|
||||
{
|
||||
data = (overlay_task_data_t*)calloc(1, sizeof(*data));
|
||||
|
||||
data->overlays = loader->overlays;
|
||||
data->size = loader->size;
|
||||
data->active = loader->active;
|
||||
|
||||
task->task_data = data;
|
||||
}
|
||||
|
||||
if (loader->overlay_path)
|
||||
free(loader->overlay_path);
|
||||
|
|
Loading…
Add table
Reference in a new issue