From: Jan Kiszka <jan.kiszka@siemens.com>
To: Igor Mammedov <imammedo@redhat.com>
Cc: qemu-devel <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] Error handling in cpu_x86_create
Date: Fri, 02 Aug 2013 17:39:00 +0200 [thread overview]
Message-ID: <51FBD294.3060704@siemens.com> (raw)
In-Reply-To: <20130730142143.10a5734d@nial.usersys.redhat.com>
On 2013-07-30 14:21, Igor Mammedov wrote:
> On Tue, 30 Jul 2013 13:00:40 +0200
> Jan Kiszka <jan.kiszka@siemens.com> wrote:
>
>> Hi Igor,
>>
>> just noticed by chance that error handling in cpu_x86_create is likely
>> broken after your changes. Any error after cpu = ...object_new() will
>> not properly release the CPU object again nor report NULL to the caller.
>> That means errors should slip through, no? And cpu_x86_init looks similar.
> Failure of object_new() in cpu_x86_create() is not checked since it should
> never fail.
>
> As for following error handling caller of cpu_x86_create(..., errp) should
> use errp to check for errors and release failed cpu.
>
> cpu_x86_init() that calls it has:
> ===
> out:
> if (error) {
> fprintf(stderr, "%s\n", error_get_pretty(error));
> error_free(error);
> if (cpu != NULL) {
> object_unref(OBJECT(cpu));
> ===
> similar code-path exists in pc_new_cpu()
Not truly:
cpu = cpu_x86_create(cpu_model, icc_bridge, errp);
if (!cpu) {
return cpu;
}
object_property_set_int(OBJECT(cpu), apic_id, "apic-id", &local_err);
object_property_set_bool(OBJECT(cpu), true, "realized", &local_err);
if (local_err) {
if (cpu != NULL) {
object_unref(OBJECT(cpu));
cpu = NULL;
}
That's what made me think the error is supposed to be derived from cpu
== NULL, rather than from errp. So the actual uncleanness is here: errp
should be checked instead of cpu, right?
Jan
>
> end goal is to replace cpu_x86_create() with just object_new(FOO_CPU),
> but that needs to x86 CPU subclasses and properties in place so
> we could remove/isolate legacy stuff to legacy hook.
>
> Did you hit any particular problem with current code?
>
>>
>> Jan
>>
>
--
Siemens AG, Corporate Technology, CT RTC ITP SES-DE
Corporate Competence Center Embedded Linux
next prev parent reply other threads:[~2013-08-02 15:39 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-30 11:00 [Qemu-devel] Error handling in cpu_x86_create Jan Kiszka
2013-07-30 12:21 ` Igor Mammedov
2013-08-02 15:39 ` Jan Kiszka [this message]
2013-08-02 17:22 ` [Qemu-devel] [PATCH for-1.6] target-i386: Fix X86CPU error handling Andreas Färber
2013-08-05 12:06 ` Andreas Färber
2013-08-05 12:09 ` Jan Kiszka
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=51FBD294.3060704@siemens.com \
--to=jan.kiszka@siemens.com \
--cc=imammedo@redhat.com \
--cc=qemu-devel@nongnu.org \
/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.