diff options
author | Marc Schink <openocd-dev@marcschink.de> | 2017-01-07 17:43:49 +0100 |
---|---|---|
committer | Tomas Vanek <vanekt@fbl.cz> | 2018-03-07 23:42:49 +0000 |
commit | c1c450e0f75a5ed11b2163a1e21dd9516dc07618 (patch) | |
tree | bc739dec0dd07120cb1c7a83c194b168e111092c | |
parent | fd6986168a5e9f33b8dba628b9d9e42196c02923 (diff) | |
download | riscv-openocd-c1c450e0f75a5ed11b2163a1e21dd9516dc07618.zip riscv-openocd-c1c450e0f75a5ed11b2163a1e21dd9516dc07618.tar.gz riscv-openocd-c1c450e0f75a5ed11b2163a1e21dd9516dc07618.tar.bz2 |
server/server: Remove all connections on shutdown
This patch fixes a memory leak in the internal server. Steps for
reproduction:
* valgrind --leak-check=full --show-reachable=yes ./build/src/openocd
* Establish more than one connection to OpenOCD (e.g. telnet)
* Shutdown OpenOCD
* Check for memory leaks in add_connection()
Change-Id: I0ae6fcf2918fd9bdec350446d3e26742d08ff698
Signed-off-by: Marc Schink <openocd-dev@marcschink.de>
Reviewed-on: http://openocd.zylin.com/4053
Tested-by: jenkins
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
-rw-r--r-- | src/server/server.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/server/server.c b/src/server/server.c index 46c860f..6fa864b 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -345,6 +345,21 @@ int add_service(char *name, return ERROR_OK; } +static void remove_connections(struct service *service) +{ + struct connection *connection; + + connection = service->connections; + + while (connection) { + struct connection *tmp; + + tmp = connection->next; + remove_connection(service, connection); + connection = tmp; + } +} + static int remove_services(void) { struct service *c = services; @@ -353,6 +368,8 @@ static int remove_services(void) while (c) { struct service *next = c->next; + remove_connections(c); + if (c->name) free(c->name); |