* [PATCH v2] tests: qmp-cmd-test: fix memory leak @ 2020-07-15 15:41 Li Qiang 2020-07-16 5:59 ` Markus Armbruster 2020-07-16 7:56 ` Thomas Huth 0 siblings, 2 replies; 7+ messages in thread From: Li Qiang @ 2020-07-15 15:41 UTC (permalink / raw) To: armbru, thuth, lvivier, pbonzini, eric.auger; +Cc: Li Qiang, liq3ea, qemu-devel Properly free each test response to avoid memory leak and separate qtest_qmp() calls with spare lines, in a consistent manner. Fixes: 5b88849e7b9("tests/qmp-cmd-test: Add qmp/object-add-failure-modes" Reviewed-by: Eric Auger <eric.auger@redhat.com> Signed-off-by: Li Qiang <liq3ea@163.com> --- Change sincve v1: add detailed commit message tests/qtest/qmp-cmd-test.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/qtest/qmp-cmd-test.c b/tests/qtest/qmp-cmd-test.c index c68f99f659..f7b1aa7fdc 100644 --- a/tests/qtest/qmp-cmd-test.c +++ b/tests/qtest/qmp-cmd-test.c @@ -230,6 +230,8 @@ static void test_object_add_failure_modes(void) " 'props': {'size': 1048576 } } }"); g_assert_nonnull(resp); g_assert(qdict_haskey(resp, "return")); + qobject_unref(resp); + resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" " {'qom-type': 'memory-backend-ram', 'id': 'ram1'," " 'props': {'size': 1048576 } } }"); @@ -241,6 +243,7 @@ static void test_object_add_failure_modes(void) " {'id': 'ram1' } }"); g_assert_nonnull(resp); g_assert(qdict_haskey(resp, "return")); + qobject_unref(resp); /* attempt to create an object with a property of a wrong type */ resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" @@ -249,17 +252,20 @@ static void test_object_add_failure_modes(void) g_assert_nonnull(resp); /* now do it right */ qmp_assert_error_class(resp, "GenericError"); + resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" " {'qom-type': 'memory-backend-ram', 'id': 'ram1'," " 'props': {'size': 1048576 } } }"); g_assert_nonnull(resp); g_assert(qdict_haskey(resp, "return")); + qobject_unref(resp); /* delete ram1 object */ resp = qtest_qmp(qts, "{'execute': 'object-del', 'arguments':" " {'id': 'ram1' } }"); g_assert_nonnull(resp); g_assert(qdict_haskey(resp, "return")); + qobject_unref(resp); /* attempt to create an object without the id */ resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" @@ -267,18 +273,21 @@ static void test_object_add_failure_modes(void) " 'props': {'size': 1048576 } } }"); g_assert_nonnull(resp); qmp_assert_error_class(resp, "GenericError"); + /* now do it right */ resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" " {'qom-type': 'memory-backend-ram', 'id': 'ram1'," " 'props': {'size': 1048576 } } }"); g_assert_nonnull(resp); g_assert(qdict_haskey(resp, "return")); + qobject_unref(resp); /* delete ram1 object */ resp = qtest_qmp(qts, "{'execute': 'object-del', 'arguments':" " {'id': 'ram1' } }"); g_assert_nonnull(resp); g_assert(qdict_haskey(resp, "return")); + qobject_unref(resp); /* attempt to set a non existing property */ resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" @@ -286,23 +295,27 @@ static void test_object_add_failure_modes(void) " 'props': {'sized': 1048576 } } }"); g_assert_nonnull(resp); qmp_assert_error_class(resp, "GenericError"); + /* now do it right */ resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" " {'qom-type': 'memory-backend-ram', 'id': 'ram1'," " 'props': {'size': 1048576 } } }"); g_assert_nonnull(resp); g_assert(qdict_haskey(resp, "return")); + qobject_unref(resp); /* delete ram1 object without id */ resp = qtest_qmp(qts, "{'execute': 'object-del', 'arguments':" " {'ida': 'ram1' } }"); g_assert_nonnull(resp); + qobject_unref(resp); /* delete ram1 object */ resp = qtest_qmp(qts, "{'execute': 'object-del', 'arguments':" " {'id': 'ram1' } }"); g_assert_nonnull(resp); g_assert(qdict_haskey(resp, "return")); + qobject_unref(resp); /* delete ram1 object that does not exist anymore*/ resp = qtest_qmp(qts, "{'execute': 'object-del', 'arguments':" -- 2.17.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2] tests: qmp-cmd-test: fix memory leak 2020-07-15 15:41 [PATCH v2] tests: qmp-cmd-test: fix memory leak Li Qiang @ 2020-07-16 5:59 ` Markus Armbruster 2020-07-16 6:43 ` Li Qiang 2020-07-16 7:56 ` Thomas Huth 1 sibling, 1 reply; 7+ messages in thread From: Markus Armbruster @ 2020-07-16 5:59 UTC (permalink / raw) To: Li Qiang; +Cc: lvivier, thuth, liq3ea, qemu-devel, eric.auger, pbonzini Li Qiang <liq3ea@163.com> writes: > Properly free each test response to avoid memory leak and separate > qtest_qmp() calls with spare lines, in a consistent manner. > > Fixes: 5b88849e7b9("tests/qmp-cmd-test: Add > qmp/object-add-failure-modes" The patch also fixes leaks introduced in 442b09b83d and 9fc719b869, actually. At least it should, but the patch appears to be incomplete. > > Reviewed-by: Eric Auger <eric.auger@redhat.com> > Signed-off-by: Li Qiang <liq3ea@163.com> > --- > Change sincve v1: add detailed commit message > > tests/qtest/qmp-cmd-test.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/tests/qtest/qmp-cmd-test.c b/tests/qtest/qmp-cmd-test.c > index c68f99f659..f7b1aa7fdc 100644 > --- a/tests/qtest/qmp-cmd-test.c > +++ b/tests/qtest/qmp-cmd-test.c > @@ -230,6 +230,8 @@ static void test_object_add_failure_modes(void) static void test_object_add_failure_modes(void) { QTestState *qts; QDict *resp; /* attempt to create an object without props */ qts = qtest_init(common_args); resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" " {'qom-type': 'memory-backend-ram', 'id': 'ram1' } }"); g_assert_nonnull(resp); qmp_assert_error_class(resp, "GenericError"); Doesn't @resp leak here, too? /* attempt to create an object without qom-type */ resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" " {'id': 'ram1' } }"); g_assert_nonnull(resp); qmp_assert_error_class(resp, "GenericError"); Likewise. /* attempt to delete an object that does not exist */ resp = qtest_qmp(qts, "{'execute': 'object-del', 'arguments':" " {'id': 'ram1' } }"); g_assert_nonnull(resp); qmp_assert_error_class(resp, "GenericError"); Likewise. /* attempt to create 2 objects with duplicate id */ resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" " {'qom-type': 'memory-backend-ram', 'id': 'ram1'," > " 'props': {'size': 1048576 } } }"); > g_assert_nonnull(resp); > g_assert(qdict_haskey(resp, "return")); > + qobject_unref(resp); > + > resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" > " {'qom-type': 'memory-backend-ram', 'id': 'ram1'," > " 'props': {'size': 1048576 } } }"); g_assert_nonnull(resp); qmp_assert_error_class(resp, "GenericError"); Likewise. /* delete ram1 object */ resp = qtest_qmp(qts, "{'execute': 'object-del', 'arguments':" > @@ -241,6 +243,7 @@ static void test_object_add_failure_modes(void) > " {'id': 'ram1' } }"); > g_assert_nonnull(resp); > g_assert(qdict_haskey(resp, "return")); > + qobject_unref(resp); > > /* attempt to create an object with a property of a wrong type */ > resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" " {'qom-type': 'memory-backend-ram', 'id': 'ram1'," " 'props': {'size': '1048576' } } }"); > @@ -249,17 +252,20 @@ static void test_object_add_failure_modes(void) > g_assert_nonnull(resp); > /* now do it right */ > qmp_assert_error_class(resp, "GenericError"); Likewise. > + > resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" > " {'qom-type': 'memory-backend-ram', 'id': 'ram1'," > " 'props': {'size': 1048576 } } }"); > g_assert_nonnull(resp); > g_assert(qdict_haskey(resp, "return")); > + qobject_unref(resp); > > /* delete ram1 object */ > resp = qtest_qmp(qts, "{'execute': 'object-del', 'arguments':" > " {'id': 'ram1' } }"); > g_assert_nonnull(resp); > g_assert(qdict_haskey(resp, "return")); > + qobject_unref(resp); > > /* attempt to create an object without the id */ > resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" " {'qom-type': 'memory-backend-ram'," > @@ -267,18 +273,21 @@ static void test_object_add_failure_modes(void) > " 'props': {'size': 1048576 } } }"); > g_assert_nonnull(resp); > qmp_assert_error_class(resp, "GenericError"); Likewise. > + > /* now do it right */ > resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" > " {'qom-type': 'memory-backend-ram', 'id': 'ram1'," > " 'props': {'size': 1048576 } } }"); > g_assert_nonnull(resp); > g_assert(qdict_haskey(resp, "return")); > + qobject_unref(resp); > > /* delete ram1 object */ > resp = qtest_qmp(qts, "{'execute': 'object-del', 'arguments':" > " {'id': 'ram1' } }"); > g_assert_nonnull(resp); > g_assert(qdict_haskey(resp, "return")); > + qobject_unref(resp); > > /* attempt to set a non existing property */ > resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" " {'qom-type': 'memory-backend-ram', 'id': 'ram1'," > @@ -286,23 +295,27 @@ static void test_object_add_failure_modes(void) > " 'props': {'sized': 1048576 } } }"); > g_assert_nonnull(resp); > qmp_assert_error_class(resp, "GenericError"); Likewise. > + > /* now do it right */ > resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" > " {'qom-type': 'memory-backend-ram', 'id': 'ram1'," > " 'props': {'size': 1048576 } } }"); > g_assert_nonnull(resp); > g_assert(qdict_haskey(resp, "return")); > + qobject_unref(resp); > > /* delete ram1 object without id */ > resp = qtest_qmp(qts, "{'execute': 'object-del', 'arguments':" > " {'ida': 'ram1' } }"); > g_assert_nonnull(resp); > + qobject_unref(resp); > > /* delete ram1 object */ > resp = qtest_qmp(qts, "{'execute': 'object-del', 'arguments':" > " {'id': 'ram1' } }"); > g_assert_nonnull(resp); > g_assert(qdict_haskey(resp, "return")); > + qobject_unref(resp); > > /* delete ram1 object that does not exist anymore*/ > resp = qtest_qmp(qts, "{'execute': 'object-del', 'arguments':" " {'id': 'ram1' } }"); g_assert_nonnull(resp); qmp_assert_error_class(resp, "GenericError"); Likewise. qtest_quit(qts); } ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2] tests: qmp-cmd-test: fix memory leak 2020-07-16 5:59 ` Markus Armbruster @ 2020-07-16 6:43 ` Li Qiang 2020-07-16 9:52 ` Markus Armbruster 0 siblings, 1 reply; 7+ messages in thread From: Li Qiang @ 2020-07-16 6:43 UTC (permalink / raw) To: Markus Armbruster Cc: Laurent Vivier, Thomas Huth, Li Qiang, Qemu Developers, Auger Eric, Paolo Bonzini Markus Armbruster <armbru@redhat.com> 于2020年7月16日周四 下午1:59写道: > > Li Qiang <liq3ea@163.com> writes: > > > Properly free each test response to avoid memory leak and separate > > qtest_qmp() calls with spare lines, in a consistent manner. > > > > Fixes: 5b88849e7b9("tests/qmp-cmd-test: Add > > qmp/object-add-failure-modes" > > The patch also fixes leaks introduced in 442b09b83d and 9fc719b869, > actually. At least it should, but the patch appears to be incomplete. > > > > > Reviewed-by: Eric Auger <eric.auger@redhat.com> > > Signed-off-by: Li Qiang <liq3ea@163.com> > > --- > > Change sincve v1: add detailed commit message > > > > tests/qtest/qmp-cmd-test.c | 13 +++++++++++++ > > 1 file changed, 13 insertions(+) > > > > diff --git a/tests/qtest/qmp-cmd-test.c b/tests/qtest/qmp-cmd-test.c > > index c68f99f659..f7b1aa7fdc 100644 > > --- a/tests/qtest/qmp-cmd-test.c > > +++ b/tests/qtest/qmp-cmd-test.c > > @@ -230,6 +230,8 @@ static void test_object_add_failure_modes(void) > static void test_object_add_failure_modes(void) > { > QTestState *qts; > QDict *resp; > > /* attempt to create an object without props */ > qts = qtest_init(common_args); > resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" > " {'qom-type': 'memory-backend-ram', 'id': 'ram1' } }"); > g_assert_nonnull(resp); > qmp_assert_error_class(resp, "GenericError"); > > Doesn't @resp leak here, too? No, qmp_assert_error_class will call qobject_unref(rsp) will so will not leak. In fact, I think this is a inconsistent for 'qtest_qmp'. I think we can apply this patch first and then change the 'qmp_assert_error_class' or/and others to free resp. And just let the caller of 'qtest_qmp' frees unref the rsp. What's your idea? Thanks, Li Qiang > > /* attempt to create an object without qom-type */ > resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" > " {'id': 'ram1' } }"); > g_assert_nonnull(resp); > qmp_assert_error_class(resp, "GenericError"); > > Likewise. > > /* attempt to delete an object that does not exist */ > resp = qtest_qmp(qts, "{'execute': 'object-del', 'arguments':" > " {'id': 'ram1' } }"); > g_assert_nonnull(resp); > qmp_assert_error_class(resp, "GenericError"); > > Likewise. > > /* attempt to create 2 objects with duplicate id */ > resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" > " {'qom-type': 'memory-backend-ram', 'id': 'ram1'," > > " 'props': {'size': 1048576 } } }"); > > g_assert_nonnull(resp); > > g_assert(qdict_haskey(resp, "return")); > > + qobject_unref(resp); > > + > > resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" > > " {'qom-type': 'memory-backend-ram', 'id': 'ram1'," > > " 'props': {'size': 1048576 } } }"); > g_assert_nonnull(resp); > qmp_assert_error_class(resp, "GenericError"); > > Likewise. > > /* delete ram1 object */ > resp = qtest_qmp(qts, "{'execute': 'object-del', 'arguments':" > > @@ -241,6 +243,7 @@ static void test_object_add_failure_modes(void) > > " {'id': 'ram1' } }"); > > g_assert_nonnull(resp); > > g_assert(qdict_haskey(resp, "return")); > > + qobject_unref(resp); > > > > /* attempt to create an object with a property of a wrong type */ > > resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" > " {'qom-type': 'memory-backend-ram', 'id': 'ram1'," > " 'props': {'size': '1048576' } } }"); > > @@ -249,17 +252,20 @@ static void test_object_add_failure_modes(void) > > g_assert_nonnull(resp); > > /* now do it right */ > > qmp_assert_error_class(resp, "GenericError"); > > Likewise. > > > + > > resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" > > " {'qom-type': 'memory-backend-ram', 'id': 'ram1'," > > " 'props': {'size': 1048576 } } }"); > > g_assert_nonnull(resp); > > g_assert(qdict_haskey(resp, "return")); > > + qobject_unref(resp); > > > > /* delete ram1 object */ > > resp = qtest_qmp(qts, "{'execute': 'object-del', 'arguments':" > > " {'id': 'ram1' } }"); > > g_assert_nonnull(resp); > > g_assert(qdict_haskey(resp, "return")); > > + qobject_unref(resp); > > > > /* attempt to create an object without the id */ > > resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" > " {'qom-type': 'memory-backend-ram'," > > @@ -267,18 +273,21 @@ static void test_object_add_failure_modes(void) > > " 'props': {'size': 1048576 } } }"); > > g_assert_nonnull(resp); > > qmp_assert_error_class(resp, "GenericError"); > > Likewise. > > > + > > /* now do it right */ > > resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" > > " {'qom-type': 'memory-backend-ram', 'id': 'ram1'," > > " 'props': {'size': 1048576 } } }"); > > g_assert_nonnull(resp); > > g_assert(qdict_haskey(resp, "return")); > > + qobject_unref(resp); > > > > /* delete ram1 object */ > > resp = qtest_qmp(qts, "{'execute': 'object-del', 'arguments':" > > " {'id': 'ram1' } }"); > > g_assert_nonnull(resp); > > g_assert(qdict_haskey(resp, "return")); > > + qobject_unref(resp); > > > > /* attempt to set a non existing property */ > > resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" > " {'qom-type': 'memory-backend-ram', 'id': 'ram1'," > > @@ -286,23 +295,27 @@ static void test_object_add_failure_modes(void) > > " 'props': {'sized': 1048576 } } }"); > > g_assert_nonnull(resp); > > qmp_assert_error_class(resp, "GenericError"); > > Likewise. > > > + > > /* now do it right */ > > resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" > > " {'qom-type': 'memory-backend-ram', 'id': 'ram1'," > > " 'props': {'size': 1048576 } } }"); > > g_assert_nonnull(resp); > > g_assert(qdict_haskey(resp, "return")); > > + qobject_unref(resp); > > > > /* delete ram1 object without id */ > > resp = qtest_qmp(qts, "{'execute': 'object-del', 'arguments':" > > " {'ida': 'ram1' } }"); > > g_assert_nonnull(resp); > > + qobject_unref(resp); > > > > /* delete ram1 object */ > > resp = qtest_qmp(qts, "{'execute': 'object-del', 'arguments':" > > " {'id': 'ram1' } }"); > > g_assert_nonnull(resp); > > g_assert(qdict_haskey(resp, "return")); > > + qobject_unref(resp); > > > > /* delete ram1 object that does not exist anymore*/ > > resp = qtest_qmp(qts, "{'execute': 'object-del', 'arguments':" > " {'id': 'ram1' } }"); > g_assert_nonnull(resp); > qmp_assert_error_class(resp, "GenericError"); > > Likewise. > > qtest_quit(qts); > } > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2] tests: qmp-cmd-test: fix memory leak 2020-07-16 6:43 ` Li Qiang @ 2020-07-16 9:52 ` Markus Armbruster 2020-07-16 10:33 ` Li Qiang 0 siblings, 1 reply; 7+ messages in thread From: Markus Armbruster @ 2020-07-16 9:52 UTC (permalink / raw) To: Li Qiang Cc: Laurent Vivier, Thomas Huth, Li Qiang, Qemu Developers, Auger Eric, Paolo Bonzini Li Qiang <liq3ea@gmail.com> writes: > Markus Armbruster <armbru@redhat.com> 于2020年7月16日周四 下午1:59写道: >> >> Li Qiang <liq3ea@163.com> writes: >> >> > Properly free each test response to avoid memory leak and separate >> > qtest_qmp() calls with spare lines, in a consistent manner. >> > >> > Fixes: 5b88849e7b9("tests/qmp-cmd-test: Add >> > qmp/object-add-failure-modes" >> >> The patch also fixes leaks introduced in 442b09b83d and 9fc719b869, >> actually. At least it should, but the patch appears to be incomplete. 442b09b83d was fine, actually. 9fc719b869 wasn't, and your second patch hunk fixes it. Please add a "Fixes: 9fc719b869' line to the commit message. >> > >> > Reviewed-by: Eric Auger <eric.auger@redhat.com> >> > Signed-off-by: Li Qiang <liq3ea@163.com> >> > --- >> > Change sincve v1: add detailed commit message >> > >> > tests/qtest/qmp-cmd-test.c | 13 +++++++++++++ >> > 1 file changed, 13 insertions(+) >> > >> > diff --git a/tests/qtest/qmp-cmd-test.c b/tests/qtest/qmp-cmd-test.c >> > index c68f99f659..f7b1aa7fdc 100644 >> > --- a/tests/qtest/qmp-cmd-test.c >> > +++ b/tests/qtest/qmp-cmd-test.c >> > @@ -230,6 +230,8 @@ static void test_object_add_failure_modes(void) >> static void test_object_add_failure_modes(void) >> { >> QTestState *qts; >> QDict *resp; >> >> /* attempt to create an object without props */ >> qts = qtest_init(common_args); >> resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" >> " {'qom-type': 'memory-backend-ram', 'id': 'ram1' } }"); >> g_assert_nonnull(resp); >> qmp_assert_error_class(resp, "GenericError"); >> >> Doesn't @resp leak here, too? > > No, qmp_assert_error_class will call qobject_unref(rsp) will so will not leak. You're right. With the additional Fixes: Reviewed-by: Markus Armbruster <armbru@redhat.com> > In fact, I think this is a inconsistent for 'qtest_qmp'. > I think we can apply this patch first and then change the > 'qmp_assert_error_class' or/and others > to free resp. And just let the caller of 'qtest_qmp' frees unref the rsp. Do you mean "not to free @resp"? > What's your idea? Rename it to qmp_expect_error_and_unref()? ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2] tests: qmp-cmd-test: fix memory leak 2020-07-16 9:52 ` Markus Armbruster @ 2020-07-16 10:33 ` Li Qiang 2020-07-16 10:47 ` Thomas Huth 0 siblings, 1 reply; 7+ messages in thread From: Li Qiang @ 2020-07-16 10:33 UTC (permalink / raw) To: Markus Armbruster Cc: Laurent Vivier, Thomas Huth, Li Qiang, Qemu Developers, Auger Eric, Paolo Bonzini Markus Armbruster <armbru@redhat.com> 于2020年7月16日周四 下午5:52写道: > > Li Qiang <liq3ea@gmail.com> writes: > > > Markus Armbruster <armbru@redhat.com> 于2020年7月16日周四 下午1:59写道: > >> > >> Li Qiang <liq3ea@163.com> writes: > >> > >> > Properly free each test response to avoid memory leak and separate > >> > qtest_qmp() calls with spare lines, in a consistent manner. > >> > > >> > Fixes: 5b88849e7b9("tests/qmp-cmd-test: Add > >> > qmp/object-add-failure-modes" > >> > >> The patch also fixes leaks introduced in 442b09b83d and 9fc719b869, > >> actually. At least it should, but the patch appears to be incomplete. > > 442b09b83d was fine, actually. > > 9fc719b869 wasn't, and your second patch hunk fixes it. Please add a > "Fixes: 9fc719b869' line to the commit message. Hi Thomas, Could you do this minor adjustment? Add also add Markus's r-b tag. > > >> > > >> > Reviewed-by: Eric Auger <eric.auger@redhat.com> > >> > Signed-off-by: Li Qiang <liq3ea@163.com> > >> > --- > >> > Change sincve v1: add detailed commit message > >> > > >> > tests/qtest/qmp-cmd-test.c | 13 +++++++++++++ > >> > 1 file changed, 13 insertions(+) > >> > > >> > diff --git a/tests/qtest/qmp-cmd-test.c b/tests/qtest/qmp-cmd-test.c > >> > index c68f99f659..f7b1aa7fdc 100644 > >> > --- a/tests/qtest/qmp-cmd-test.c > >> > +++ b/tests/qtest/qmp-cmd-test.c > >> > @@ -230,6 +230,8 @@ static void test_object_add_failure_modes(void) > >> static void test_object_add_failure_modes(void) > >> { > >> QTestState *qts; > >> QDict *resp; > >> > >> /* attempt to create an object without props */ > >> qts = qtest_init(common_args); > >> resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" > >> " {'qom-type': 'memory-backend-ram', 'id': 'ram1' } }"); > >> g_assert_nonnull(resp); > >> qmp_assert_error_class(resp, "GenericError"); > >> > >> Doesn't @resp leak here, too? > > > > No, qmp_assert_error_class will call qobject_unref(rsp) will so will not leak. > > You're right. > > With the additional Fixes: > Reviewed-by: Markus Armbruster <armbru@redhat.com> > > > In fact, I think this is a inconsistent for 'qtest_qmp'. > > I think we can apply this patch first and then change the > > 'qmp_assert_error_class' or/and others > > to free resp. And just let the caller of 'qtest_qmp' frees unref the rsp. > > Do you mean "not to free @resp"? Yes, the 'qmp_assert_error_class' not free @resp. > > > What's your idea? > > Rename it to qmp_expect_error_and_unref()? In fact I prefer qmp_assert_error_class has no reason unref @resp. So the user of ''qtest_qmp' will has a unify processing of the @resp. resp = qtest_qmp() use resp free resp. If we just rename to 'qmp_expect_error_and_unref'. The user still should remember this. If not they will have UAF or mem leak issue. Thanks, Li Qiang > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2] tests: qmp-cmd-test: fix memory leak 2020-07-16 10:33 ` Li Qiang @ 2020-07-16 10:47 ` Thomas Huth 0 siblings, 0 replies; 7+ messages in thread From: Thomas Huth @ 2020-07-16 10:47 UTC (permalink / raw) To: Li Qiang, Markus Armbruster Cc: Laurent Vivier, Auger Eric, Li Qiang, Qemu Developers, Paolo Bonzini On 16/07/2020 12.33, Li Qiang wrote: > Markus Armbruster <armbru@redhat.com> 于2020年7月16日周四 下午5:52写道: >> >> Li Qiang <liq3ea@gmail.com> writes: >> >>> Markus Armbruster <armbru@redhat.com> 于2020年7月16日周四 下午1:59写道: >>>> >>>> Li Qiang <liq3ea@163.com> writes: >>>> >>>>> Properly free each test response to avoid memory leak and separate >>>>> qtest_qmp() calls with spare lines, in a consistent manner. >>>>> >>>>> Fixes: 5b88849e7b9("tests/qmp-cmd-test: Add >>>>> qmp/object-add-failure-modes" >>>> >>>> The patch also fixes leaks introduced in 442b09b83d and 9fc719b869, >>>> actually. At least it should, but the patch appears to be incomplete. >> >> 442b09b83d was fine, actually. >> >> 9fc719b869 wasn't, and your second patch hunk fixes it. Please add a >> "Fixes: 9fc719b869' line to the commit message. > > Hi Thomas, > > Could you do this minor adjustment? > Add also add Markus's r-b tag. Sure, I'll add it! Thomas ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2] tests: qmp-cmd-test: fix memory leak 2020-07-15 15:41 [PATCH v2] tests: qmp-cmd-test: fix memory leak Li Qiang 2020-07-16 5:59 ` Markus Armbruster @ 2020-07-16 7:56 ` Thomas Huth 1 sibling, 0 replies; 7+ messages in thread From: Thomas Huth @ 2020-07-16 7:56 UTC (permalink / raw) To: Li Qiang, armbru, lvivier, pbonzini, eric.auger; +Cc: liq3ea, qemu-devel On 15/07/2020 17.41, Li Qiang wrote: > Properly free each test response to avoid memory leak and separate > qtest_qmp() calls with spare lines, in a consistent manner. > > Fixes: 5b88849e7b9("tests/qmp-cmd-test: Add > qmp/object-add-failure-modes" > > Reviewed-by: Eric Auger <eric.auger@redhat.com> > Signed-off-by: Li Qiang <liq3ea@163.com> > --- > Change sincve v1: add detailed commit message > > tests/qtest/qmp-cmd-test.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) Thanks, queued to https://gitlab.com/huth/qemu/-/commits/qtest-next/ Thomas ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2020-07-16 10:47 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-07-15 15:41 [PATCH v2] tests: qmp-cmd-test: fix memory leak Li Qiang 2020-07-16 5:59 ` Markus Armbruster 2020-07-16 6:43 ` Li Qiang 2020-07-16 9:52 ` Markus Armbruster 2020-07-16 10:33 ` Li Qiang 2020-07-16 10:47 ` Thomas Huth 2020-07-16 7:56 ` Thomas Huth
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.