diff mbox

main_loop: Make main_loop_wait() return void

Message ID 1490968309-13672-1-git-send-email-peter.maydell@linaro.org
State New
Headers show

Commit Message

Peter Maydell March 31, 2017, 1:51 p.m. UTC
In commit e330c118f2a5a the last usage of main_loop_wait() that cared
about the return value was changed to no longer use it. Drop the
now-useless return value and make the function return void.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
Coverity complains (CID 1372464) about main_loop() calling
main_loop_wait() and ignoring its return value. I suspect
this change will just displace that to within main_loop_wait()
itself since the underlying issue there is "the ppoll() that
gets called to poll fds can return an error code, but what
do we do if it does?". Suggestions on that point welcome.

I guess this will make the compiler warn about ret being
set and never used if CONFIG_SLIRP is not defined, which
is irritating. I'm postponing messing about with fixing
that in favour of seeing whether anybody has a good answer
to the question above (which might make it moot).
---
 include/qemu/main-loop.h | 2 +-
 util/main-loop.c         | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

Comments

Peter Maydell March 31, 2017, 1:54 p.m. UTC | #1
On 31 March 2017 at 14:51, Peter Maydell <peter.maydell@linaro.org> wrote:
> In commit e330c118f2a5a the last usage of main_loop_wait() that cared
> about the return value was changed to no longer use it. Drop the
> now-useless return value and make the function return void.
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
> Coverity complains (CID 1372464) about main_loop() calling
> main_loop_wait() and ignoring its return value. I suspect
> this change will just displace that to within main_loop_wait()
> itself since the underlying issue there is "the ppoll() that
> gets called to poll fds can return an error code, but what
> do we do if it does?". Suggestions on that point welcome.
>
> I guess this will make the compiler warn about ret being
> set and never used if CONFIG_SLIRP is not defined, which
> is irritating. I'm postponing messing about with fixing
> that in favour of seeing whether anybody has a good answer
> to the question above (which might make it moot).
> ---

...oops, I meant to tag this RFC; never mind.

thanks
-- PMM
Eric Blake March 31, 2017, 2:10 p.m. UTC | #2
On 03/31/2017 08:51 AM, Peter Maydell wrote:
> In commit e330c118f2a5a the last usage of main_loop_wait() that cared
> about the return value was changed to no longer use it. Drop the
> now-useless return value and make the function return void.
> 
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
> Coverity complains (CID 1372464) about main_loop() calling
> main_loop_wait() and ignoring its return value. I suspect
> this change will just displace that to within main_loop_wait()
> itself since the underlying issue there is "the ppoll() that
> gets called to poll fds can return an error code, but what
> do we do if it does?". Suggestions on that point welcome.

At one point, there was a suggestion to introduce an ignore_value()
macro that ignores values that the compiler/coverity would otherwise
complain about, in contexts where we really are okay ignoring the value.
 If making main_loop_wait() return void shifts where Coverity blames,
then ignore_value(ppoll()) seems like it might help.

> 
> I guess this will make the compiler warn about ret being
> set and never used if CONFIG_SLIRP is not defined, which
> is irritating. I'm postponing messing about with fixing
> that in favour of seeing whether anybody has a good answer
> to the question above (which might make it moot).
> ---

> -int main_loop_wait(int nonblocking)
> +void main_loop_wait(int nonblocking)
>  {
>      int ret;
>      uint32_t timeout = UINT32_MAX;
> @@ -513,7 +513,7 @@ int main_loop_wait(int nonblocking)
>      qemu_start_warp_timer();
>      qemu_clock_run_all_timers();
>  
> -    return ret;
> +    return;
>  }

We generally avoid lone return; at the end of a void function.
Peter Maydell May 30, 2017, 2:08 p.m. UTC | #3
On 31 March 2017 at 15:10, Eric Blake <eblake@redhat.com> wrote:
> On 03/31/2017 08:51 AM, Peter Maydell wrote:
>> In commit e330c118f2a5a the last usage of main_loop_wait() that cared
>> about the return value was changed to no longer use it. Drop the
>> now-useless return value and make the function return void.
>>
>> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
>> ---
>> Coverity complains (CID 1372464) about main_loop() calling
>> main_loop_wait() and ignoring its return value. I suspect
>> this change will just displace that to within main_loop_wait()
>> itself since the underlying issue there is "the ppoll() that
>> gets called to poll fds can return an error code, but what
>> do we do if it does?". Suggestions on that point welcome.
>
> At one point, there was a suggestion to introduce an ignore_value()
> macro that ignores values that the compiler/coverity would otherwise
> complain about, in contexts where we really are okay ignoring the value.
>  If making main_loop_wait() return void shifts where Coverity blames,
> then ignore_value(ppoll()) seems like it might help.

Mmm, but my question really is "is ignoring the error code
from the syscall the correct thing to do?"... though I'm
not sure what else we would want to do (log a warning?
abort?).

thanks
-- PMM
diff mbox

Patch

diff --git a/include/qemu/main-loop.h b/include/qemu/main-loop.h
index d7e24af..6b4b60b 100644
--- a/include/qemu/main-loop.h
+++ b/include/qemu/main-loop.h
@@ -79,7 +79,7 @@  int qemu_init_main_loop(Error **errp);
  *
  * @nonblocking: Whether the caller should block until an event occurs.
  */
-int main_loop_wait(int nonblocking);
+void main_loop_wait(int nonblocking);
 
 /**
  * qemu_get_aio_context: Return the main loop's AioContext
diff --git a/util/main-loop.c b/util/main-loop.c
index 4534c89..d0e27f3 100644
--- a/util/main-loop.c
+++ b/util/main-loop.c
@@ -476,7 +476,7 @@  static int os_host_main_loop_wait(int64_t timeout)
 }
 #endif
 
-int main_loop_wait(int nonblocking)
+void main_loop_wait(int nonblocking)
 {
     int ret;
     uint32_t timeout = UINT32_MAX;
@@ -513,7 +513,7 @@  int main_loop_wait(int nonblocking)
     qemu_start_warp_timer();
     qemu_clock_run_all_timers();
 
-    return ret;
+    return;
 }
 
 /* Functions to operate on the main QEMU AioContext.  */