io: add ability to associate an opaque "result" with with a task

Currently there is no data associated with a successful
task completion. This adds an opaque pointer to the task
to store an arbitrary result.

Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
Daniel P. Berrange 2016-08-11 14:36:21 +01:00
parent e8c8adecad
commit 52dd99e8a4
2 changed files with 47 additions and 0 deletions

View File

@ -239,6 +239,33 @@ void qio_task_abort(QIOTask *task,
Error *err);
/**
* qio_task_set_result_pointer:
* @task: the task struct
* @result: pointer to the result data
*
* Associate an opaque result with the task,
* which can later be retrieved with the
* qio_task_get_result_pointer() method
*
*/
void qio_task_set_result_pointer(QIOTask *task,
gpointer result,
GDestroyNotify notify);
/**
* qio_task_get_result_pointer:
* @task: the task struct
*
* Retrieve the opaque result data associated
* with the task, if any.
*
* Returns: the task result, or NULL
*/
gpointer qio_task_get_result_pointer(QIOTask *task);
/**
* qio_task_get_source:
* @task: the task struct

View File

@ -29,6 +29,8 @@ struct QIOTask {
QIOTaskFunc func;
gpointer opaque;
GDestroyNotify destroy;
gpointer result;
GDestroyNotify destroyResult;
};
@ -57,6 +59,9 @@ static void qio_task_free(QIOTask *task)
if (task->destroy) {
task->destroy(task->opaque);
}
if (task->destroyResult) {
task->destroyResult(task->result);
}
object_unref(task->source);
g_free(task);
@ -154,6 +159,21 @@ void qio_task_abort(QIOTask *task,
}
void qio_task_set_result_pointer(QIOTask *task,
gpointer result,
GDestroyNotify destroy)
{
task->result = result;
task->destroyResult = destroy;
}
gpointer qio_task_get_result_pointer(QIOTask *task)
{
return task->result;
}
Object *qio_task_get_source(QIOTask *task)
{
return task->source;