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);
|
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:
|
* qio_task_get_source:
|
||||||
* @task: the task struct
|
* @task: the task struct
|
||||||
|
|
20
io/task.c
20
io/task.c
|
@ -29,6 +29,8 @@ struct QIOTask {
|
||||||
QIOTaskFunc func;
|
QIOTaskFunc func;
|
||||||
gpointer opaque;
|
gpointer opaque;
|
||||||
GDestroyNotify destroy;
|
GDestroyNotify destroy;
|
||||||
|
gpointer result;
|
||||||
|
GDestroyNotify destroyResult;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -57,6 +59,9 @@ static void qio_task_free(QIOTask *task)
|
||||||
if (task->destroy) {
|
if (task->destroy) {
|
||||||
task->destroy(task->opaque);
|
task->destroy(task->opaque);
|
||||||
}
|
}
|
||||||
|
if (task->destroyResult) {
|
||||||
|
task->destroyResult(task->result);
|
||||||
|
}
|
||||||
object_unref(task->source);
|
object_unref(task->source);
|
||||||
|
|
||||||
g_free(task);
|
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)
|
Object *qio_task_get_source(QIOTask *task)
|
||||||
{
|
{
|
||||||
return task->source;
|
return task->source;
|
||||||
|
|
Loading…
Reference in New Issue