diff mbox series

[v11,for-4.0,08/11] qemu_thread: supplement error handling for qemu_signalfd_compat

Message ID 20190201051806.53183-9-lifei1214@126.com
State New
Headers show
Series qemu_thread_create: propagate the error to callers to handle | expand

Commit Message

fei Feb. 1, 2019, 5:18 a.m. UTC
From: Fei Li <shirley17fei@gmail.com>

For qemu_signalfd_compat: set errno, do some cleanup, and return
-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>
---
 util/compatfd.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

Comments

Markus Armbruster Feb. 1, 2019, 2:13 p.m. UTC | #1
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>
fei Feb. 2, 2019, 4:52 a.m. UTC | #2
> 在 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 mbox series

Patch

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];
 }