From 5c8a98f725debfc38ec95c5ee9312891aabfd2d2 Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Fri, 25 Aug 2017 13:39:04 -0700 Subject: [PATCH] Temporary fix for memory leak on DumpRunningServiceTimeout. Test: mmm -j32 frameworks/native/cmds/dumpsys && \ adb sync && adb shell /data/nativetest/dumpsys_test/dumpsys_test && \ adb shell /data/nativetest64/dumpsys_test/dumpsys_test && \ printf "\n\n#### ALL TESTS PASSED ####\n" Bug: 65056227 Change-Id: I328806e9edf8e156039fb5dd963c3750c67c98d9 --- cmds/dumpsys/tests/dumpsys_test.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/cmds/dumpsys/tests/dumpsys_test.cpp b/cmds/dumpsys/tests/dumpsys_test.cpp index 66beb6d4e0..cfd53e578c 100644 --- a/cmds/dumpsys/tests/dumpsys_test.cpp +++ b/cmds/dumpsys/tests/dumpsys_test.cpp @@ -35,6 +35,7 @@ using ::testing::DoAll; using ::testing::Eq; using ::testing::HasSubstr; using ::testing::MakeAction; +using ::testing::Mock; using ::testing::Not; using ::testing::Return; using ::testing::StrEq; @@ -155,10 +156,11 @@ class DumpsysTest : public Test { .WillRepeatedly(DoAll(WithArg<0>(WriteOnFd(output)), Return(0))); } - void ExpectDumpAndHang(const char* name, int timeout_s, const std::string& output) { + sp ExpectDumpAndHang(const char* name, int timeout_s, const std::string& output) { sp binder_mock = ExpectCheckService(name); EXPECT_CALL(*binder_mock, dump(_, _)) .WillRepeatedly(DoAll(Sleep(timeout_s), WithArg<0>(WriteOnFd(output)), Return(0))); + return binder_mock; } void CallMain(const std::vector& args) { @@ -245,15 +247,15 @@ TEST_F(DumpsysTest, DumpRunningService) { // Tests 'dumpsys -t 1 service_name' on a service that times out after 2s TEST_F(DumpsysTest, DumpRunningServiceTimeout) { - ExpectDumpAndHang("Valet", 2, "Here's your car"); + sp binder_mock = ExpectDumpAndHang("Valet", 2, "Here's your car"); CallMain({"-t", "1", "Valet"}); AssertOutputContains("SERVICE 'Valet' DUMP TIMEOUT (1s) EXPIRED"); AssertNotDumped("Here's your car"); - // Must wait so binder mock is deleted, otherwise test will fail with a leaked object - sleep(1); + // TODO(b/65056227): BinderMock is not destructed because thread is detached on dumpsys.cpp + Mock::AllowLeak(binder_mock.get()); } // Tests 'dumpsys service_name Y U NO HAVE ARGS' on a service that is running -- 2.11.0