[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 1/5] qemu-socket: Clean up inet_connect_opts()
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PULL 1/5] qemu-socket: Clean up inet_connect_opts() |
Date: |
Wed, 21 May 2014 12:45:11 +0200 |
From: Markus Armbruster <address@hidden>
Separate the search for a working addrinfo from the code that does
something with it. Makes for a clearer search loop.
Use a local Error * to simplify resetting the error in the search
loop.
Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Paolo Bonzini <address@hidden>
Signed-off-by: Gerd Hoffmann <address@hidden>
---
util/qemu-sockets.c | 28 ++++++++++++++++------------
1 file changed, 16 insertions(+), 12 deletions(-)
diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
index 8818d7c..627e609 100644
--- a/util/qemu-sockets.c
+++ b/util/qemu-sockets.c
@@ -354,6 +354,7 @@ static struct addrinfo *inet_parse_connect_opts(QemuOpts
*opts, Error **errp)
int inet_connect_opts(QemuOpts *opts, Error **errp,
NonBlockingConnectHandler *callback, void *opaque)
{
+ Error *local_err = NULL;
struct addrinfo *res, *e;
int sock = -1;
bool in_progress;
@@ -372,24 +373,27 @@ int inet_connect_opts(QemuOpts *opts, Error **errp,
}
for (e = res; e != NULL; e = e->ai_next) {
- if (error_is_set(errp)) {
- error_free(*errp);
- *errp = NULL;
- }
+ error_free(local_err);
+ local_err = NULL;
if (connect_state != NULL) {
connect_state->current_addr = e;
}
- sock = inet_connect_addr(e, &in_progress, connect_state, errp);
- if (in_progress) {
- return sock;
- } else if (sock >= 0) {
- /* non blocking socket immediate success, call callback */
- if (callback != NULL) {
- callback(sock, opaque);
- }
+ sock = inet_connect_addr(e, &in_progress, connect_state, &local_err);
+ if (sock >= 0) {
break;
}
}
+
+ if (sock < 0) {
+ error_propagate(errp, local_err);
+ } else if (in_progress) {
+ /* wait_for_connect() will do the rest */
+ return sock;
+ } else {
+ if (callback) {
+ callback(sock, opaque);
+ }
+ }
g_free(connect_state);
freeaddrinfo(res);
return sock;
--
1.8.3.1
- [Qemu-devel] [PULL 0/5] purge error_is_set(), Gerd Hoffmann, 2014/05/21
- [Qemu-devel] [PULL 5/5] error: error_is_set() is finally unused; remove, Gerd Hoffmann, 2014/05/21
- [Qemu-devel] [PULL 4/5] char: Explain qmp_chardev_add()'s unusual error handling, Gerd Hoffmann, 2014/05/21
- [Qemu-devel] [PULL 1/5] qemu-socket: Clean up inet_connect_opts(),
Gerd Hoffmann <=
- [Qemu-devel] [PULL 2/5] char: Use return values instead of error_is_set(errp), Gerd Hoffmann, 2014/05/21
- [Qemu-devel] [PULL 3/5] char: Clean up fragile use of error_is_set(), Gerd Hoffmann, 2014/05/21
- Re: [Qemu-devel] [PULL 0/5] purge error_is_set(), Peter Maydell, 2014/05/22