machine: use class base init generated name
authorMarc-André Lureau <marcandre.lureau@redhat.com>
Wed, 13 Jul 2016 10:45:50 +0000 (12:45 +0200)
committerMarc-André Lureau <marcandre.lureau@redhat.com>
Thu, 8 Sep 2016 14:05:21 +0000 (18:05 +0400)
machine_class_base_init() member name is allocated by
machine_class_base_init(), but not freed by
machine_class_finalize().  Simply freeing there doesn't work,
because DEFINE_PC_MACHINE() overwrites it with a literal string.

Fix DEFINE_PC_MACHINE() not to overwrite it, and add the missing
free to machine_class_finalize().

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
hw/core/machine.c
include/hw/boards.h
include/hw/i386/pc.h

index e5a456f21dd96b09e8d9482855f95d6a94ad7d6a..00fbe3e880f946d34708a721a2104efbfa89f9d0 100644 (file)
@@ -561,6 +561,7 @@ static void machine_class_finalize(ObjectClass *klass, void *data)
     if (mc->compat_props) {
         g_array_free(mc->compat_props, true);
     }
+    g_free(mc->name);
 }
 
 void machine_register_compat_props(MachineState *machine)
index 3e69eca0383823408a7879f28f35dd0d74ee296c..e46a744bcd2578c535e5ce62301954d277e89756 100644 (file)
@@ -93,7 +93,7 @@ struct MachineClass {
     /*< public >*/
 
     const char *family; /* NULL iff @name identifies a standalone machtype */
-    const char *name;
+    char *name;
     const char *alias;
     const char *desc;
 
index 330c1f2d6b3e9aec5cefadfe75d59b4cf0975d63..422fac702a25dbb5c39445f43f80e3461ce9698e 100644 (file)
@@ -903,7 +903,6 @@ bool e820_get_entry(int, uint32_t, uint64_t *, uint64_t *);
     { \
         MachineClass *mc = MACHINE_CLASS(oc); \
         optsfn(mc); \
-        mc->name = namestr; \
         mc->init = initfn; \
     } \
     static const TypeInfo pc_machine_type_##suffix = { \