Commit 34e46f60 authored by Marc-André Lureau's avatar Marc-André Lureau
Browse files

tests: pc-cpu-test leaks fixes



The path is allocated and should be freed.

The qmp response should be unref, but then 'machine' must be duplicated.

Use a destroy function for the PCTestData.

Signed-off-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: default avatarEric Blake <eblake@redhat.com>
parent 822e36ca
Loading
Loading
Loading
Loading
+19 −5
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@
#include "qapi/qmp/types.h"

struct PCTestData {
    const char *machine;
    char *machine;
    const char *cpu_model;
    unsigned sockets;
    unsigned cores;
@@ -71,6 +71,14 @@ static void test_pc_without_cpu_add(gconstpointer data)
    g_free(args);
}

static void test_data_free(gpointer data)
{
    PCTestData *pc = data;

    g_free(pc->machine);
    g_free(pc);
}

static void add_pc_test_cases(void)
{
    QDict *response, *minfo;
@@ -78,7 +86,8 @@ static void add_pc_test_cases(void)
    const QListEntry *p;
    QObject *qobj;
    QString *qstr;
    const char *mname, *path;
    const char *mname;
    char *path;
    PCTestData *data;

    qtest_start("-machine none");
@@ -99,7 +108,7 @@ static void add_pc_test_cases(void)
            continue;
        }
        data = g_malloc(sizeof(PCTestData));
        data->machine = mname;
        data->machine = g_strdup(mname);
        data->cpu_model = "Haswell"; /* 1.3+ theoretically */
        data->sockets = 1;
        data->cores = 3;
@@ -119,14 +128,19 @@ static void add_pc_test_cases(void)
            path = g_strdup_printf("cpu/%s/init/%ux%ux%u&maxcpus=%u",
                                   mname, data->sockets, data->cores,
                                   data->threads, data->maxcpus);
            qtest_add_data_func(path, data, test_pc_without_cpu_add);
            qtest_add_data_func_full(path, data, test_pc_without_cpu_add,
                                     test_data_free);
            g_free(path);
        } else {
            path = g_strdup_printf("cpu/%s/add/%ux%ux%u&maxcpus=%u",
                                   mname, data->sockets, data->cores,
                                   data->threads, data->maxcpus);
            qtest_add_data_func(path, data, test_pc_with_cpu_add);
            qtest_add_data_func_full(path, data, test_pc_with_cpu_add,
                                     test_data_free);
            g_free(path);
        }
    }
    QDECREF(response);
    qtest_end();
}