All of lore.kernel.org
 help / color / mirror / Atom feed
From: fei <lifei1214@126.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
	qemu-devel@nongnu.org, shirley17fei@gmail.com
Subject: Re: [Qemu-devel] [PATCH for-4.0 v9 06/16] qemu_thread: Make qemu_thread_create() handle errors properly
Date: Wed, 9 Jan 2019 22:42:37 +0800	[thread overview]
Message-ID: <B57CAE3F-B0EC-4635-AB59-EDC462032CA4@126.com> (raw)
In-Reply-To: <875zuxew44.fsf@dusky.pond.sub.org>



> 在 2019年1月9日,22:36,Markus Armbruster <armbru@redhat.com> 写道:
> 
> Fei Li <lifei1214@126.com> writes:
> 
>>> 在 2019/1/9 上午1:07, Markus Armbruster 写道:
>>> fei <lifei1214@126.com> writes:
>>> 
>>>>> 在 2019年1月8日,01:18,Markus Armbruster <armbru@redhat.com> 写道:
>>>>> 
>>>>> Fei Li <fli@suse.com> writes:
> [...]
>>>>>> diff --git a/util/qemu-thread-posix.c b/util/qemu-thread-posix.c
>>>>>> index 865e476df5..39834b0551 100644
>>>>>> --- a/util/qemu-thread-posix.c
>>>>>> +++ b/util/qemu-thread-posix.c
>>>>>> @@ -15,6 +15,7 @@
>>>>>> #include "qemu/atomic.h"
>>>>>> #include "qemu/notify.h"
>>>>>> #include "qemu-thread-common.h"
>>>>>> +#include "qapi/error.h"
>>>>>> 
>>>>>> static bool name_threads;
>>>>>> 
>>>>>> @@ -500,9 +501,13 @@ static void *qemu_thread_start(void *args)
>>>>>>     return r;
>>>>>> }
>>>>>> 
>>>>>> -void qemu_thread_create(QemuThread *thread, const char *name,
>>>>>> -                       void *(*start_routine)(void*),
>>>>>> -                       void *arg, int mode)
>>>>>> +/*
>>>>>> + * Return a boolean: true/false to indicate whether it succeeds.
>>>>>> + * If fails, propagate the error to Error **errp and set the errno.
>>>>>> + */
>>>>> Let's write something that can pass as a function contract:
>>>>> 
>>>>>   /*
>>>>>    * Create a new thread with name @name
>>>>>    * The thread executes @start_routine() with argument @arg.
>>>>>    * The thread will be created in a detached state if @mode is
>>>>>    * QEMU_THREAD_DETACHED, and in a jounable state if it's
>>>>>    * QEMU_THREAD_JOINABLE.
>>>>>    * On success, return true.
>>>>>    * On failure, set @errno, store an error through @errp and return
>>>>>    * false.
>>>>>    */
>>>> Thanks so much for amending! :)
>>>>> Personally, I'd return negative errno instead of false, and dispense
>>>>> with setting errno.
>>>> Emm, I think I have replied this in last version, but due to several reasons I did not wait for your feedback and sent the v9. Sorry for that.. And I like to paste my two considerations here:
>>>> “- Actually only one caller needs the errno, that is the above qemu_signalfd_compat().
>>> Yes.
>>> 
>>>> - For the returning value, I remember there's once a email thread talking about it: returning a bool (and let the passed errp hold the error message) is to keep the consistency with glib.
>>> GLib doesn't discourage return types other than boolean.  It only asks
>>> that if you return boolean, then true should mean success and false
>>> should mean failure.  See
>>> 
>>>     https://developer.gnome.org/glib/stable/glib-Error-Reporting.html
>>> 
>>> under "Rules for use of GError", item "By convention, if you return a
>>> boolean value".
>>> 
>>> The discussion you remember was about a convention we used to enforce in
>>> QEMU, namely to avoid returning boolean success, and return void
>>> instead.  That was basically a bad idea.
>>> 
>>>> So IMO I am wondering whether it is really needed to change the bool (true/false) to int (0/-errno), just for that sole function: qemu_signalfd_compat() which needs the errno. Besides if we return -errno, for each caller we need add a local variable like “ret= qemu_thread_create()” to store the -errno.
>>> Well, you either assign the error code to errno just for that caller, or
>>> you return the error code just for that caller.  I'd do the latter
>>> because I consider it slightly simpler.  Compare
>>> 
>>>  * On success, return true.
>>>  * On failure, set @errno, store an error through @errp and return
>>>  * false.
>>> 
>>> to
>>> 
>>>  * On success, return zero.
>>>  * On failure, store an error through @errp and return negative errno.
>>> 
>>> where the second sentence describes just two instead of three actions.
>>> 
>>> [...]
>> Ok, decribing two actions than three is indeed simpler. But I still
>> have one uncertain:
>> for those callers do not need the errno value, could we just check the
>> return value
>> to see whether it is negative, but not cache the unused return value? I mean
>> 
>> In the caller:
>> 
>> {...
>>     if (qemu_thread_create() < 0) {// do some cleanup}
>> ...}
> 
> This is just fine when you handle all errors the same.
> 
>> instead of
>> 
>> {    int ret;
>> ...
>>     ret = qemu_thread_create();
>>     if (ret < 0) { //do some cleanup }
>> 
>> ...}
> 
> I'd object to this one unless the value of @ret gets used elsewhere.
Ok, thanks for the review :)

Have a nice day
Fei
> 
>> As the first one can lessen quite a lot of codes. :)
>> 
>> Have a nice day, thanks
>> 
>> Fei

  reply	other threads:[~2019-01-09 14:43 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-25 14:04 [Qemu-devel] [PATCH for-4.0 v9 00/16] qemu_thread_create: propagate the error to callers to handle Fei Li
2018-12-25 14:04 ` [Qemu-devel] [PATCH for-4.0 v9 01/16] Fix segmentation fault when qemu_signal_init fails Fei Li
2018-12-25 14:04 ` [Qemu-devel] [PATCH for-4.0 v9 02/16] migration: fix the multifd code when receiving less channels Fei Li
2018-12-25 14:04 ` [Qemu-devel] [PATCH for-4.0 v9 03/16] migration: remove unused &local_err parameter in multifd_save_cleanup Fei Li
2019-01-07 16:50   ` Markus Armbruster
2019-01-08 15:58     ` fei
2018-12-25 14:04 ` [Qemu-devel] [PATCH for-4.0 v9 04/16] migration: add more error handling for postcopy_ram_enable_notify Fei Li
2018-12-25 14:04 ` [Qemu-devel] [PATCH for-4.0 v9 05/16] migration: unify error handling for process_incoming_migration_co Fei Li
2019-01-03 11:25   ` Dr. David Alan Gilbert
2019-01-03 13:27     ` Fei Li
2018-12-25 14:04 ` [Qemu-devel] [PATCH for-4.0 v9 06/16] qemu_thread: Make qemu_thread_create() handle errors properly Fei Li
2019-01-07 17:18   ` Markus Armbruster
2019-01-08 15:55     ` fei
2019-01-08 17:07       ` Markus Armbruster
2019-01-09 13:19         ` Fei Li
2019-01-09 14:36           ` Markus Armbruster
2019-01-09 14:42             ` fei [this message]
2018-12-25 14:04 ` [Qemu-devel] [PATCH for-4.0 v9 07/16] qemu_thread: supplement error handling for qemu_X_start_vcpu Fei Li
2018-12-25 14:04 ` [Qemu-devel] [PATCH for-4.0 v9 08/16] qemu_thread: supplement error handling for qmp_dump_guest_memory Fei Li
2019-01-07 17:21   ` Markus Armbruster
2019-01-08 16:00     ` fei
2018-12-25 14:04 ` [Qemu-devel] [PATCH for-4.0 v9 09/16] qemu_thread: supplement error handling for pci_edu_realize Fei Li
2019-01-07 17:29   ` Markus Armbruster
2019-01-08  6:14     ` Jiri Slaby
2019-01-08  6:51       ` Peter Xu
2019-01-08  8:43         ` Markus Armbruster
2019-01-10 13:29           ` Fei Li
2019-01-11  2:49             ` Peter Xu
2019-01-11 13:19               ` Fei Li
2019-01-13 15:44     ` Fei Li
2019-01-14 12:36       ` Markus Armbruster
2019-01-14 13:38         ` Fei Li
2019-01-15 12:55           ` Markus Armbruster
2019-01-16  4:43             ` Fei Li
2018-12-25 14:04 ` [Qemu-devel] [PATCH for-4.0 v9 10/16] qemu_thread: supplement error handling for h_resize_hpt_prepare Fei Li
2019-01-02  2:36   ` David Gibson
2019-01-02  6:44     ` 李菲
2019-01-03  3:43       ` David Gibson
2019-01-03 13:41         ` Fei Li
2019-01-04  5:21           ` David Gibson
2019-01-04  6:20             ` Fei Li
2018-12-25 14:04 ` [Qemu-devel] [PATCH for-4.0 v9 11/16] qemu_thread: supplement error handling for emulated_realize Fei Li
2019-01-07 17:31   ` Markus Armbruster
2019-01-09 13:21     ` Fei Li
2018-12-25 14:04 ` [Qemu-devel] [PATCH for-4.0 v9 12/16] qemu_thread: supplement error handling for iothread_complete/qemu_signalfd_compat Fei Li
2019-01-07 17:50   ` Markus Armbruster
2019-01-08 16:18     ` fei
2019-01-13 16:16       ` Fei Li
2019-01-14 12:53         ` Markus Armbruster
2019-01-14 13:52           ` Fei Li
2018-12-25 14:04 ` [Qemu-devel] [PATCH for-4.0 v9 13/16] qemu_thread: supplement error handling for migration Fei Li
2019-01-03 12:35   ` Dr. David Alan Gilbert
2019-01-03 12:47     ` Fei Li
2019-01-09 15:26   ` Markus Armbruster
2019-01-09 16:01     ` fei
2018-12-25 14:04 ` [Qemu-devel] [PATCH for-4.0 v9 14/16] qemu_thread: supplement error handling for vnc_start_worker_thread Fei Li
2019-01-07 17:54   ` Markus Armbruster
2019-01-08 16:24     ` fei
2018-12-25 14:04 ` [Qemu-devel] [PATCH for-4.0 v9 15/16] qemu_thread: supplement error handling for touch_all_pages Fei Li
2019-01-07 18:13   ` Markus Armbruster
2019-01-09 16:13     ` fei
2018-12-25 14:04 ` [Qemu-devel] [PATCH for-4.0 v9 16/16] qemu_thread_join: fix segmentation fault Fei Li
2019-01-07 17:55   ` Markus Armbruster
2019-01-08 16:50     ` fei
2019-01-08 17:29       ` Markus Armbruster
2019-01-09 14:01         ` Fei Li
2019-01-09 15:24           ` Markus Armbruster
2019-01-09 15:57             ` fei
2019-01-10  9:20               ` Markus Armbruster
2019-01-10 13:24                 ` Fei Li
2019-01-10 16:06                   ` Markus Armbruster
2019-01-11 14:01                     ` Fei Li
2019-01-02 13:46 ` [Qemu-devel] [PATCH for-4.0 v9 00/16] qemu_thread_create: propagate the error to callers to handle no-reply
2019-01-07 12:44   ` Fei Li

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=B57CAE3F-B0EC-4635-AB59-EDC462032CA4@126.com \
    --to=lifei1214@126.com \
    --cc=armbru@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=shirley17fei@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.