mirror of https://github.com/xemu-project/xemu.git
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:
parent
e8c8adecad
commit
52dd99e8a4
|
@ -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
|
||||
|
|
20
io/task.c
20
io/task.c
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue