Message ID | 20190201051806.53183-9-lifei1214@126.com |
---|---|
State | New |
Headers | show |
Series | qemu_thread_create: propagate the error to callers to handle | expand |
Fei Li <lifei1214@126.com> writes: > From: Fei Li <shirley17fei@gmail.com> > > For qemu_signalfd_compat: set errno, do some cleanup, and return "For iothread_complete" is redundant, isn't it? > -1 to replace the temporary &error_abort when failing to create > sigwait_compat. > > Cc: Markus Armbruster <armbru@redhat.com> > Cc: Eric Blake <eblake@redhat.com> > Signed-off-by: Fei Li <shirley17fei@gmail.com> Reviewed-by: Markus Armbruster <armbru@redhat.com>
> 在 2019年2月1日,22:13,Markus Armbruster <armbru@redhat.com> 写道: > > Fei Li <lifei1214@126.com> writes: > >> From: Fei Li <shirley17fei@gmail.com> >> >> For qemu_signalfd_compat: set errno, do some cleanup, and return > > "For iothread_complete" is redundant, isn't it? Yep, will remove it. Thanks for pointing this out. :) > >> -1 to replace the temporary &error_abort when failing to create >> sigwait_compat. >> >> Cc: Markus Armbruster <armbru@redhat.com> >> Cc: Eric Blake <eblake@redhat.com> >> Signed-off-by: Fei Li <shirley17fei@gmail.com> > > Reviewed-by: Markus Armbruster <armbru@redhat.com> Have a nice day Fei
diff --git a/util/compatfd.c b/util/compatfd.c index c3d8448264..9d642475fc 100644 --- a/util/compatfd.c +++ b/util/compatfd.c @@ -71,6 +71,7 @@ static int qemu_signalfd_compat(const sigset_t *mask) struct sigfd_compat_info *info; QemuThread thread; int fds[2]; + int ret; info = malloc(sizeof(*info)); if (info == NULL) { @@ -89,9 +90,15 @@ static int qemu_signalfd_compat(const sigset_t *mask) memcpy(&info->mask, mask, sizeof(*mask)); info->fd = fds[1]; - /* TODO: let the further caller handle the error instead of abort() here */ - qemu_thread_create(&thread, "signalfd_compat", sigwait_compat, - info, QEMU_THREAD_DETACHED, &error_abort); + ret = qemu_thread_create(&thread, "signalfd_compat", sigwait_compat, + info, QEMU_THREAD_DETACHED, NULL); + if (ret < 0) { + close(fds[0]); + close(fds[1]); + free(info); + errno = -ret; + return -1; + } return fds[0]; }