(tasks) Make task handles honor task->cancelled

This commit is contained in:
Higor Eurípedes 2015-11-24 22:17:38 -03:00
parent 0496bed76e
commit 29e9b87319
6 changed files with 48 additions and 10 deletions

View file

@ -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())
{

View file

@ -198,6 +198,7 @@ typedef struct
**/
void input_overlay_free(void);
void input_overlay_free_overlay(struct overlay *overlay);
/**
* input_overlay_init

View file

@ -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)

View file

@ -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:

View file

@ -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
{

View file

@ -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);