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>
This commit is contained in:
parent
fd6986168a
commit
c1c450e0f7
|
@ -345,6 +345,21 @@ int add_service(char *name,
|
||||||
return ERROR_OK;
|
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)
|
static int remove_services(void)
|
||||||
{
|
{
|
||||||
struct service *c = services;
|
struct service *c = services;
|
||||||
|
@ -353,6 +368,8 @@ static int remove_services(void)
|
||||||
while (c) {
|
while (c) {
|
||||||
struct service *next = c->next;
|
struct service *next = c->next;
|
||||||
|
|
||||||
|
remove_connections(c);
|
||||||
|
|
||||||
if (c->name)
|
if (c->name)
|
||||||
free(c->name);
|
free(c->name);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue