On 11/12/21 03:28, wangyanan (Y) wrote: > On 2021/11/11 18:03, Philippe Mathieu-Daudé wrote: >> If the MachineClass::name pointer is not explicitly set, it is NULL. >> Per the C standard, passing a NULL pointer to printf "%s" format is >> undefined. Some implementations display it as 'NULL', other as 'null'. >> Since we are comparing the formatted output, we need a stable value. >> The easiest is to explicit a machine name string. >> >> Signed-off-by: Philippe Mathieu-Daudé <phi...@redhat.com> >> --- >> tests/unit/test-smp-parse.c | 8 ++++++-- >> 1 file changed, 6 insertions(+), 2 deletions(-)
>> @@ -481,6 +483,8 @@ static void machine_class_init(ObjectClass *oc, >> void *data) >> mc->smp_props.prefer_sockets = true; >> mc->smp_props.dies_supported = false; >> + >> + mc->name = g_strdup(SMP_MACHINE_NAME); > I'm not very familiar with Qom code, so it may be a stupid question. > The mc->name will be automatically freed elsewhere when all the > testing is finished and exits, right? :) I'll defer that to Eduardo / Markus, but meanwhile my understanding is QOM classes are loaded once (the first time an instance requires it) and never unloaded. Only instances can be unloaded, their resources being released. The machine life time is tied to the process one, when we are done using a machine, it is simpler to exit() the process -- the kernel releases the resources for us -- and create another process for a new machine, rather than re-creating a different machine within the same process. If there is a need for it (like releasing class resources), it is doable but it seems we never worried about it.