Doing error handling on a single place will make it easier to make sure memory is freed, and that error information is properly printed or returned to the caller.
Signed-off-by: Eduardo Habkost <ehabk...@redhat.com> --- target-i386/cpu.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/target-i386/cpu.c b/target-i386/cpu.c index 73b0fa1..69f1204 100644 --- a/target-i386/cpu.c +++ b/target-i386/cpu.c @@ -1506,17 +1506,20 @@ X86CPU *cpu_x86_init(const char *cpu_model) env->cpu_model_str = cpu_model; if (cpu_x86_register(cpu, cpu_model) < 0) { - object_delete(OBJECT(cpu)); - return NULL; + goto error; } x86_cpu_realize(OBJECT(cpu), &error); if (error) { - error_free(error); - object_delete(OBJECT(cpu)); - return NULL; + goto error; } return cpu; +error: + object_delete(OBJECT(cpu)); + if (error) { + error_free(error); + } + return NULL; } #if !defined(CONFIG_USER_ONLY) -- 1.7.11.7