diff mbox series

[v2,27/35] vnc: Clean up error reporting in vnc_init_func()

Message ID 20181015115309.17089-28-armbru@redhat.com
State New
Headers show
Series Replace some unwise uses of error_report() & friends | expand

Commit Message

Markus Armbruster Oct. 15, 2018, 11:53 a.m. UTC
Calling error_report() in a function that takes an Error ** argument
is suspicious.  vnc_init_func() does that, and then fails without
setting an error.  Its caller main(), via qemu_opts_foreach(), is fine
with it, but clean it up anyway.

Cc: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 ui/vnc.c | 9 +++++----
 vl.c     | 2 +-
 2 files changed, 6 insertions(+), 5 deletions(-)

Comments

Fei Li Oct. 15, 2018, 12:51 p.m. UTC | #1
On 10/15/2018 07:53 PM, Markus Armbruster wrote:
> Calling error_report() in a function that takes an Error ** argument
> is suspicious.  vnc_init_func() does that, and then fails without
> setting an error.  Its caller main(), via qemu_opts_foreach(), is fine
> with it, but clean it up anyway.
>
> Cc: Gerd Hoffmann <kraxel@redhat.com>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>   ui/vnc.c | 9 +++++----
>   vl.c     | 2 +-
>   2 files changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/ui/vnc.c b/ui/vnc.c
> index 98e3d3b1d8..fcd2744d52 100644
> --- a/ui/vnc.c
> +++ b/ui/vnc.c
> @@ -4082,13 +4082,14 @@ int vnc_init_func(void *opaque, QemuOpts *opts, Error **errp)
>       assert(id);
>       vnc_display_init(id, &local_err);
>       if (local_err) {
> -        error_report_err(local_err);
> -        exit(1);
> +        error_propagate(errp, local_err);
Shall we use error_propagate(errp, local_err, ("Failed to init VNC 
server: ");
like vnc_display_open does?
If yes, I guess this error message should be added from last patch [26/35].
If not, please omit. :)

Have a nice day
Fei
> +        return -1;
>       }
>       vnc_display_open(id, &local_err);
>       if (local_err != NULL) {
> -        error_reportf_err(local_err, "Failed to start VNC server: ");
> -        exit(1);
> +        error_propagate_prepend(errp, local_err,
> +                                "Failed to start VNC server: ");
> +        return -1;
>       }
>       return 0;
>   }
> diff --git a/vl.c b/vl.c
> index c053117028..8e0006d49c 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -4526,7 +4526,7 @@ int main(int argc, char **argv, char **envp)
>       /* init remote displays */
>   #ifdef CONFIG_VNC
>       qemu_opts_foreach(qemu_find_opts("vnc"),
> -                      vnc_init_func, NULL, NULL);
> +                      vnc_init_func, NULL, &error_fatal);
>   #endif
>   
>       if (using_spice) {
Philippe Mathieu-Daudé Oct. 15, 2018, 10:41 p.m. UTC | #2
On 15/10/2018 13:53, Markus Armbruster wrote:
> Calling error_report() in a function that takes an Error ** argument
> is suspicious.  vnc_init_func() does that, and then fails without
> setting an error.  Its caller main(), via qemu_opts_foreach(), is fine
> with it, but clean it up anyway.
> 
> Cc: Gerd Hoffmann <kraxel@redhat.com>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>

> ---
>  ui/vnc.c | 9 +++++----
>  vl.c     | 2 +-
>  2 files changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/ui/vnc.c b/ui/vnc.c
> index 98e3d3b1d8..fcd2744d52 100644
> --- a/ui/vnc.c
> +++ b/ui/vnc.c
> @@ -4082,13 +4082,14 @@ int vnc_init_func(void *opaque, QemuOpts *opts, Error **errp)
>      assert(id);
>      vnc_display_init(id, &local_err);
>      if (local_err) {
> -        error_report_err(local_err);
> -        exit(1);
> +        error_propagate(errp, local_err);
> +        return -1;
>      }
>      vnc_display_open(id, &local_err);
>      if (local_err != NULL) {
> -        error_reportf_err(local_err, "Failed to start VNC server: ");
> -        exit(1);
> +        error_propagate_prepend(errp, local_err,
> +                                "Failed to start VNC server: ");
> +        return -1;
>      }
>      return 0;
>  }
> diff --git a/vl.c b/vl.c
> index c053117028..8e0006d49c 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -4526,7 +4526,7 @@ int main(int argc, char **argv, char **envp)
>      /* init remote displays */
>  #ifdef CONFIG_VNC
>      qemu_opts_foreach(qemu_find_opts("vnc"),
> -                      vnc_init_func, NULL, NULL);
> +                      vnc_init_func, NULL, &error_fatal);
>  #endif
>  
>      if (using_spice) {
>
Markus Armbruster Oct. 16, 2018, 4:08 a.m. UTC | #3
Fei Li <fli@suse.com> writes:

> On 10/15/2018 07:53 PM, Markus Armbruster wrote:
>> Calling error_report() in a function that takes an Error ** argument
>> is suspicious.  vnc_init_func() does that, and then fails without
>> setting an error.  Its caller main(), via qemu_opts_foreach(), is fine
>> with it, but clean it up anyway.
>>
>> Cc: Gerd Hoffmann <kraxel@redhat.com>
>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>> ---
>>   ui/vnc.c | 9 +++++----
>>   vl.c     | 2 +-
>>   2 files changed, 6 insertions(+), 5 deletions(-)
>>
>> diff --git a/ui/vnc.c b/ui/vnc.c
>> index 98e3d3b1d8..fcd2744d52 100644
>> --- a/ui/vnc.c
>> +++ b/ui/vnc.c
>> @@ -4082,13 +4082,14 @@ int vnc_init_func(void *opaque, QemuOpts *opts, Error **errp)
>>       assert(id);
>>       vnc_display_init(id, &local_err);
>>       if (local_err) {
>> -        error_report_err(local_err);
>> -        exit(1);
>> +        error_propagate(errp, local_err);
> Shall we use error_propagate(errp, local_err, ("Failed to init VNC
> server: ");
> like vnc_display_open does?

I don't know.  

The error reporting is somewhat poor around here.  Consider:

    $ qemu-system-x86_64 -display vnc=:0,share=nope
    qemu-system-x86_64: -display vnc=:0,share=nope: Failed to start VNC server: unknown vnc share= option

The "Failed to start VNC server: " prefix doesn't really add value.

    $ qemu-system-x86_64 -display vnc=:0 -k bad
    qemu-system-x86_64: -display vnc=:0: could not read keymap file: 'bad'

The error message refers to -display instead of -k.  I doubt adding the
prefix would improve it.

Gerd, what do you think?

> If yes, I guess this error message should be added from last patch [26/35].

Yes.

> If not, please omit. :)
>
> Have a nice day
> Fei
>> +        return -1;
>>       }
>>       vnc_display_open(id, &local_err);
>>       if (local_err != NULL) {
>> -        error_reportf_err(local_err, "Failed to start VNC server: ");
>> -        exit(1);
>> +        error_propagate_prepend(errp, local_err,
>> +                                "Failed to start VNC server: ");
>> +        return -1;
>>       }
>>       return 0;
>>   }
>> diff --git a/vl.c b/vl.c
>> index c053117028..8e0006d49c 100644
>> --- a/vl.c
>> +++ b/vl.c
>> @@ -4526,7 +4526,7 @@ int main(int argc, char **argv, char **envp)
>>       /* init remote displays */
>>   #ifdef CONFIG_VNC
>>       qemu_opts_foreach(qemu_find_opts("vnc"),
>> -                      vnc_init_func, NULL, NULL);
>> +                      vnc_init_func, NULL, &error_fatal);
>>   #endif
>>         if (using_spice) {
Gerd Hoffmann Oct. 16, 2018, 6:52 a.m. UTC | #4
> >> +        error_propagate(errp, local_err);
> > Shall we use error_propagate(errp, local_err, ("Failed to init VNC
> > server: ");
> > like vnc_display_open does?
> 
> I don't know.  
> 
> The error reporting is somewhat poor around here.  Consider:
> 
>     $ qemu-system-x86_64 -display vnc=:0,share=nope
>     qemu-system-x86_64: -display vnc=:0,share=nope: Failed to start VNC server: unknown vnc share= option
> 
> The "Failed to start VNC server: " prefix doesn't really add value.

Indeed.

> Gerd, what do you think?

I'd keep the messages short.

cheers,
  Gerd
Markus Armbruster Oct. 16, 2018, 11:21 a.m. UTC | #5
Gerd Hoffmann <kraxel@redhat.com> writes:

>> >> +        error_propagate(errp, local_err);
>> > Shall we use error_propagate(errp, local_err, ("Failed to init VNC
>> > server: ");
>> > like vnc_display_open does?
>> 
>> I don't know.  
>> 
>> The error reporting is somewhat poor around here.  Consider:
>> 
>>     $ qemu-system-x86_64 -display vnc=:0,share=nope
>>     qemu-system-x86_64: -display vnc=:0,share=nope: Failed to start VNC server: unknown vnc share= option
>> 
>> The "Failed to start VNC server: " prefix doesn't really add value.
>
> Indeed.
>
>> Gerd, what do you think?
>
> I'd keep the messages short.

Okay, I'll delete the prefix.  Thanks!
diff mbox series

Patch

diff --git a/ui/vnc.c b/ui/vnc.c
index 98e3d3b1d8..fcd2744d52 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -4082,13 +4082,14 @@  int vnc_init_func(void *opaque, QemuOpts *opts, Error **errp)
     assert(id);
     vnc_display_init(id, &local_err);
     if (local_err) {
-        error_report_err(local_err);
-        exit(1);
+        error_propagate(errp, local_err);
+        return -1;
     }
     vnc_display_open(id, &local_err);
     if (local_err != NULL) {
-        error_reportf_err(local_err, "Failed to start VNC server: ");
-        exit(1);
+        error_propagate_prepend(errp, local_err,
+                                "Failed to start VNC server: ");
+        return -1;
     }
     return 0;
 }
diff --git a/vl.c b/vl.c
index c053117028..8e0006d49c 100644
--- a/vl.c
+++ b/vl.c
@@ -4526,7 +4526,7 @@  int main(int argc, char **argv, char **envp)
     /* init remote displays */
 #ifdef CONFIG_VNC
     qemu_opts_foreach(qemu_find_opts("vnc"),
-                      vnc_init_func, NULL, NULL);
+                      vnc_init_func, NULL, &error_fatal);
 #endif
 
     if (using_spice) {