[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openocd-development
Subject:    [OpenOCD-devel] [PATCH]: 8de0d06 rtos: Destroy RTOS and fix memory leak
From:       gerrit () openocd ! org (gerrit)
Date:       2020-02-27 12:57:34
Message-ID: 20200227125734.3D4BC4A0137 () mail ! openocd ! org
[Download RAW message or body]

This is an automated email from Gerrit.

Marc Schink (dev@zapb.de) just uploaded a new patch set to Gerrit, which you can find \
at http://openocd.zylin.com/5479

-- gerrit

commit 8de0d0659b1907953502c67485d9147187a0344b
Author: Marc Schink <dev@zapb.de>
Date:   Thu Feb 27 13:48:15 2020 +0100

    rtos: Destroy RTOS and fix memory leak
    
    The memory leak can be reproduced by using an arbitrary RTOS
    and valgrind:
    
     $ valgrind --leak-check=full --show-leak-kinds=all
    
    [...]
    ==9656== 224 (80 direct, 144 indirect) bytes in 1 blocks are definitely lost in \
loss record 3 of 3  ==9656==    at 0x483CD99: calloc (in \
/usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)  ==9656==    by \
0x1C541A: os_alloc (rtos.c:79)  ==9656==    by 0x1C569E: os_alloc_create (rtos.c:111)
    ==9656==    by 0x1C569E: rtos_create (rtos.c:153)
    ==9656==    by 0x1AE332: target_configure (target.c:4899)
    ==9656==    by 0x1AF228: jim_target_configure (target.c:4952)
    ==9656==    by 0x1C9EF9: command_unknown (command.c:1066)
    ==9656==    by 0x313284: JimInvokeCommand (jim.c:10364)
    ==9656==    by 0x313FB6: Jim_EvalObj (jim.c:10814)
    ==9656==    by 0x3154A3: Jim_EvalFile (jim.c:11207)
    ==9656==    by 0x316015: Jim_SourceCoreCommand (jim.c:15230)
    ==9656==    by 0x313284: JimInvokeCommand (jim.c:10364)
    ==9656==    by 0x313B8B: JimEvalObjList (jim.c:10605)
    [...]
    
    Change-Id: I2cd41a154fb8570842601ff4e3e76502f5908f49
    Signed-off-by: Marc Schink <dev@zapb.de>

diff --git a/src/rtos/rtos.c b/src/rtos/rtos.c
index 002d7b5..549833f 100644
--- a/src/rtos/rtos.c
+++ b/src/rtos/rtos.c
@@ -159,6 +159,11 @@ int rtos_create(Jim_GetOptInfo *goi, struct target *target)
 	return JIM_ERR;
 }
 
+void rtos_destroy(struct target *target)
+{
+	os_free(target);
+}
+
 int gdb_thread_packet(struct connection *connection, char const *packet, int \
packet_size)  {
 	struct target *target = get_target_from_connection(connection);
diff --git a/src/rtos/rtos.h b/src/rtos/rtos.h
index a649e24..c755eec 100644
--- a/src/rtos/rtos.h
+++ b/src/rtos/rtos.h
@@ -111,6 +111,7 @@ struct rtos_register_stacking {
 #define GDB_THREAD_PACKET_NOT_CONSUMED (-40)
 
 int rtos_create(Jim_GetOptInfo *goi, struct target *target);
+void rtos_destroy(struct target *target);
 int rtos_set_reg(struct connection *connection, int reg_num,
 		uint8_t *reg_value);
 int rtos_generic_stack_read(struct target *target,
diff --git a/src/target/target.c b/src/target/target.c
index 63a4439..a840d21 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -2046,6 +2046,8 @@ static void target_destroy(struct target *target)
 		target->smp = 0;
 	}
 
+	rtos_destroy(target);
+
 	free(target->gdb_port_override);
 	free(target->type);
 	free(target->trace_info);

-- 


_______________________________________________
OpenOCD-devel mailing list
OpenOCD-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openocd-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic