Amos Kong <ak...@redhat.com> writes: > On 19/09/12 16:33, Amos Kong wrote: >> On 14/09/12 02:58, Orit Wasserman wrote: >>> From: "Michael S. Tsirkin" <m...@redhat.com> >>> >>> refactor address resolution code to fix nonblocking connect >>> remove getnameinfo call >>> >>> Signed-off-by: Michael S. Tsirkin <m...@redhat.com> >>> Signed-off-by: Amos Kong <ak...@redhat.com> >>> Signed-off-by: Orit Wasserman <owass...@redhat.com> >> >> Hi Orit, >> >> Happy new year! >> >>> --- >>> qemu-sockets.c | 144 >>> +++++++++++++++++++++++++++++++------------------------ >>> 1 files changed, 81 insertions(+), 63 deletions(-) >>> >>> diff --git a/qemu-sockets.c b/qemu-sockets.c >>> index 361d890..939a453 100644 >>> --- a/qemu-sockets.c >>> +++ b/qemu-sockets.c >>> @@ -209,95 +209,113 @@ listen: >>> return slisten; >>> } >>> >>> -int inet_connect_opts(QemuOpts *opts, bool *in_progress, Error **errp) >>> +#ifdef _WIN32 >>> +#define QEMU_SOCKET_RC_INPROGRESS(rc) \ >>> + ((rc) == -EINPROGRESS || rc == -EWOULDBLOCK || rc == -WSAEALREADY) > > ^^ Brackets are only be used for first 'rc' > >>> +#else >>> +#define QEMU_SOCKET_RC_INPROGRESS(rc) \ >>> + ((rc) == -EINPROGRESS) >>> +#endif > >> >>> + >>> +int inet_connect_opts(QemuOpts *opts, bool *in_progress, Error **errp) >>> +{ >>> + struct addrinfo *res, *e; >>> + int sock = -1; >>> + bool block = qemu_opt_get_bool(opts, "block", 0); >>> + >>> + res = inet_parse_connect_opts(opts, errp); >>> + if (!res) { >>> + return -1; > > In this error path, in_progress is not assigned, but it's used > in tcp_start_outgoing_migration()
Took me a minute to see what you mean. inet_connect_opts() is called by inet_connect(), which is called by tcp_start_outgoing_migration(), which uses in_progress. The other callers of inet_connect() and inet_connect_opts() aren't affected, because they pass null in_progress. > Let also set the default value of in_progress to 'false' in > tcp_start_outgoing_migration() No, let's make sure the functions that take an in_progress argument always set it. That's easier to use safely. >>> + } >>> + >> >>> + if (in_progress) { >>> + *in_progress = false; >>> } >> >> trivial comment: >> >> You moved this block to head of inet_connect_addr() in [patch 3/3], >> why not do this in this patch? >> >> I know if *in_progress becomes "true", sock is always >= 0, for loop >> will exits. >> But moving this block to inet_connect_addr() is clearer. Makes inet_connect_addr() always set in_progress, which I like. [...]