From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58147) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Yxwe7-0002FX-0N for qemu-devel@nongnu.org; Thu, 28 May 2015 08:10:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Yxwe0-0003Wc-Sv for qemu-devel@nongnu.org; Thu, 28 May 2015 08:10:46 -0400 From: Shannon Zhao Date: Thu, 28 May 2015 20:08:35 +0800 Message-ID: <1432814932-12608-13-git-send-email-zhaoshenglong@huawei.com> In-Reply-To: <1432814932-12608-1-git-send-email-zhaoshenglong@huawei.com> References: <1432814932-12608-1-git-send-email-zhaoshenglong@huawei.com> MIME-Version: 1.0 Content-Type: text/plain Subject: [Qemu-devel] [PATCH 12/29] hw/ppc/ppc440_bamboo.c: Fix memory leak spotted by valgrind List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: qemu-trivial@nongnu.org, pbonzini@redhat.com, mjt@tls.msk.ru, shannon.zhao@linaro.org, peter.maydell@linaro.org From: Shannon Zhao valgrind complains about: ==6366== 4,936 (256 direct, 4,680 indirect) bytes in 1 blocks are definitely lost in loss record 3,245 of 3,271 ==6366== at 0x4C2845D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==6366== by 0x336F47: malloc_and_trace (vl.c:2556) ==6366== by 0x64C770E: g_malloc (in /usr/lib64/libglib-2.0.so.0.3600.3) ==6366== by 0x3C093B: qemu_extend_irqs (irq.c:55) ==6366== by 0x3C09C7: qemu_allocate_irqs (irq.c:64) ==6366== by 0x265091: ppcuic_init (ppc4xx_devs.c:317) ==6366== by 0x26A90A: bamboo_init (ppc440_bamboo.c:205) ==6366== by 0x33B312: main (vl.c:4249) Signed-off-by: Shannon Zhao Signed-off-by: Shannon Zhao --- hw/ppc/ppc440_bamboo.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/hw/ppc/ppc440_bamboo.c b/hw/ppc/ppc440_bamboo.c index 778970a..23b091f 100644 --- a/hw/ppc/ppc440_bamboo.c +++ b/hw/ppc/ppc440_bamboo.c @@ -235,13 +235,28 @@ static void bamboo_init(MachineState *machine) serial_mm_init(address_space_mem, 0xef600300, 0, pic[0], PPC_SERIAL_MM_BAUDBASE, serial_hds[0], DEVICE_BIG_ENDIAN); + } else { + qemu_free_irq(pic[0]); } if (serial_hds[1] != NULL) { serial_mm_init(address_space_mem, 0xef600400, 0, pic[1], PPC_SERIAL_MM_BAUDBASE, serial_hds[1], DEVICE_BIG_ENDIAN); + } else { + qemu_free_irq(pic[1]); } + for (i = 2; i < 14; i++) { + qemu_free_irq(pic[i]); + } + for (i = 15; i < 25; i++) { + qemu_free_irq(pic[i]); + } + for (i = 29; i < 32; i++) { + qemu_free_irq(pic[i]); + } + g_free(pic); + if (pcibus) { /* Register network interfaces. */ for (i = 0; i < nb_nics; i++) { -- 2.0.4