io: remove Error parameter from QIOTask thread worker
Now that task objects have a directly associated error, there's no need for an an Error **errp parameter to the QIOTask thread worker function. It already has a QIOTask object, so can directly set the error on it. Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
parent
60e705c51c
commit
59de517d8d
|
@ -29,9 +29,8 @@ typedef struct QIOTask QIOTask;
|
||||||
typedef void (*QIOTaskFunc)(QIOTask *task,
|
typedef void (*QIOTaskFunc)(QIOTask *task,
|
||||||
gpointer opaque);
|
gpointer opaque);
|
||||||
|
|
||||||
typedef int (*QIOTaskWorker)(QIOTask *task,
|
typedef void (*QIOTaskWorker)(QIOTask *task,
|
||||||
Error **errp,
|
gpointer opaque);
|
||||||
gpointer opaque);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* QIOTask:
|
* QIOTask:
|
||||||
|
@ -163,18 +162,16 @@ typedef int (*QIOTaskWorker)(QIOTask *task,
|
||||||
* socket listen using QIOTask would require:
|
* socket listen using QIOTask would require:
|
||||||
*
|
*
|
||||||
* <example>
|
* <example>
|
||||||
* static int myobject_listen_worker(QIOTask *task,
|
* static void myobject_listen_worker(QIOTask *task,
|
||||||
* Error **errp,
|
* gpointer opaque)
|
||||||
* gpointer opaque)
|
|
||||||
* {
|
* {
|
||||||
* QMyObject obj = QMY_OBJECT(qio_task_get_source(task));
|
* QMyObject obj = QMY_OBJECT(qio_task_get_source(task));
|
||||||
* SocketAddress *addr = opaque;
|
* SocketAddress *addr = opaque;
|
||||||
|
* Error *err = NULL;
|
||||||
*
|
*
|
||||||
* obj->fd = socket_listen(addr, errp);
|
* obj->fd = socket_listen(addr, &err);
|
||||||
* if (obj->fd < 0) {
|
*
|
||||||
* return -1;
|
qio_task_set_error(task, err);
|
||||||
* }
|
|
||||||
* return 0;
|
|
||||||
* }
|
* }
|
||||||
*
|
*
|
||||||
* void myobject_listen_async(QMyObject *obj,
|
* void myobject_listen_async(QMyObject *obj,
|
||||||
|
|
|
@ -156,19 +156,16 @@ int qio_channel_socket_connect_sync(QIOChannelSocket *ioc,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int qio_channel_socket_connect_worker(QIOTask *task,
|
static void qio_channel_socket_connect_worker(QIOTask *task,
|
||||||
Error **errp,
|
gpointer opaque)
|
||||||
gpointer opaque)
|
|
||||||
{
|
{
|
||||||
QIOChannelSocket *ioc = QIO_CHANNEL_SOCKET(qio_task_get_source(task));
|
QIOChannelSocket *ioc = QIO_CHANNEL_SOCKET(qio_task_get_source(task));
|
||||||
SocketAddress *addr = opaque;
|
SocketAddress *addr = opaque;
|
||||||
int ret;
|
Error *err = NULL;
|
||||||
|
|
||||||
ret = qio_channel_socket_connect_sync(ioc,
|
qio_channel_socket_connect_sync(ioc, addr, &err);
|
||||||
addr,
|
|
||||||
errp);
|
|
||||||
|
|
||||||
return ret;
|
qio_task_set_error(task, err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -218,19 +215,16 @@ int qio_channel_socket_listen_sync(QIOChannelSocket *ioc,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int qio_channel_socket_listen_worker(QIOTask *task,
|
static void qio_channel_socket_listen_worker(QIOTask *task,
|
||||||
Error **errp,
|
gpointer opaque)
|
||||||
gpointer opaque)
|
|
||||||
{
|
{
|
||||||
QIOChannelSocket *ioc = QIO_CHANNEL_SOCKET(qio_task_get_source(task));
|
QIOChannelSocket *ioc = QIO_CHANNEL_SOCKET(qio_task_get_source(task));
|
||||||
SocketAddress *addr = opaque;
|
SocketAddress *addr = opaque;
|
||||||
int ret;
|
Error *err = NULL;
|
||||||
|
|
||||||
ret = qio_channel_socket_listen_sync(ioc,
|
qio_channel_socket_listen_sync(ioc, addr, &err);
|
||||||
addr,
|
|
||||||
errp);
|
|
||||||
|
|
||||||
return ret;
|
qio_task_set_error(task, err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -293,21 +287,18 @@ static void qio_channel_socket_dgram_worker_free(gpointer opaque)
|
||||||
g_free(data);
|
g_free(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int qio_channel_socket_dgram_worker(QIOTask *task,
|
static void qio_channel_socket_dgram_worker(QIOTask *task,
|
||||||
Error **errp,
|
gpointer opaque)
|
||||||
gpointer opaque)
|
|
||||||
{
|
{
|
||||||
QIOChannelSocket *ioc = QIO_CHANNEL_SOCKET(qio_task_get_source(task));
|
QIOChannelSocket *ioc = QIO_CHANNEL_SOCKET(qio_task_get_source(task));
|
||||||
struct QIOChannelSocketDGramWorkerData *data = opaque;
|
struct QIOChannelSocketDGramWorkerData *data = opaque;
|
||||||
int ret;
|
Error *err = NULL;
|
||||||
|
|
||||||
/* socket_dgram() blocks in DNS lookups, so we must use a thread */
|
/* socket_dgram() blocks in DNS lookups, so we must use a thread */
|
||||||
ret = qio_channel_socket_dgram_sync(ioc,
|
qio_channel_socket_dgram_sync(ioc, data->localAddr,
|
||||||
data->localAddr,
|
data->remoteAddr, &err);
|
||||||
data->remoteAddr,
|
|
||||||
errp);
|
|
||||||
|
|
||||||
return ret;
|
qio_task_set_error(task, err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
10
io/task.c
10
io/task.c
|
@ -77,8 +77,6 @@ struct QIOTaskThreadData {
|
||||||
QIOTaskWorker worker;
|
QIOTaskWorker worker;
|
||||||
gpointer opaque;
|
gpointer opaque;
|
||||||
GDestroyNotify destroy;
|
GDestroyNotify destroy;
|
||||||
Error *err;
|
|
||||||
int ret;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -87,9 +85,6 @@ static gboolean gio_task_thread_result(gpointer opaque)
|
||||||
struct QIOTaskThreadData *data = opaque;
|
struct QIOTaskThreadData *data = opaque;
|
||||||
|
|
||||||
trace_qio_task_thread_result(data->task);
|
trace_qio_task_thread_result(data->task);
|
||||||
if (data->err) {
|
|
||||||
qio_task_set_error(data->task, data->err);
|
|
||||||
}
|
|
||||||
qio_task_complete(data->task);
|
qio_task_complete(data->task);
|
||||||
|
|
||||||
if (data->destroy) {
|
if (data->destroy) {
|
||||||
|
@ -107,10 +102,7 @@ static gpointer qio_task_thread_worker(gpointer opaque)
|
||||||
struct QIOTaskThreadData *data = opaque;
|
struct QIOTaskThreadData *data = opaque;
|
||||||
|
|
||||||
trace_qio_task_thread_run(data->task);
|
trace_qio_task_thread_run(data->task);
|
||||||
data->ret = data->worker(data->task, &data->err, data->opaque);
|
data->worker(data->task, data->opaque);
|
||||||
if (data->ret < 0 && data->err == NULL) {
|
|
||||||
error_setg(&data->err, "Task worker failed but did not set an error");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We're running in the background thread, and must only
|
/* We're running in the background thread, and must only
|
||||||
* ever report the task results in the main event loop
|
* ever report the task results in the main event loop
|
||||||
|
|
|
@ -140,20 +140,18 @@ struct TestThreadWorkerData {
|
||||||
GMainLoop *loop;
|
GMainLoop *loop;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int test_task_thread_worker(QIOTask *task,
|
static void test_task_thread_worker(QIOTask *task,
|
||||||
Error **errp,
|
gpointer opaque)
|
||||||
gpointer opaque)
|
|
||||||
{
|
{
|
||||||
struct TestThreadWorkerData *data = opaque;
|
struct TestThreadWorkerData *data = opaque;
|
||||||
|
|
||||||
data->worker = g_thread_self();
|
data->worker = g_thread_self();
|
||||||
|
|
||||||
if (data->fail) {
|
if (data->fail) {
|
||||||
error_setg(errp, "Testing fail");
|
Error *err = NULL;
|
||||||
return -1;
|
error_setg(&err, "Testing fail");
|
||||||
|
qio_task_set_error(task, err);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue