From 349f43c2fcf1f60aa88d75159efe860c52435026 Mon Sep 17 00:00:00 2001 From: Tomasz Kulasek Date: Wed, 8 Aug 2018 09:25:29 +0200 Subject: [PATCH] sock: fix socket memory free Memory for socket structure is allocated in the selected net framework but freed in the libsocket on the higher level. This patch moves memory free to the net framework implementation. Change-Id: Ia3d4e1553a858a38beb390986e9af105778c12c7 Signed-off-by: Tomasz Kulasek Reviewed-on: https://review.gerrithub.io/421587 Tested-by: SPDK CI Jenkins Chandler-Test-Pool: SPDK Automated Test System Reviewed-by: Jim Harris Reviewed-by: Tomasz Zawadzki Reviewed-by: Ben Walker --- lib/sock/posix/posix.c | 8 +++++++- lib/sock/sock.c | 1 - lib/sock/vpp/vpp.c | 1 + test/unit/lib/sock/sock.c/sock_ut.c | 1 + 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/sock/posix/posix.c b/lib/sock/posix/posix.c index 18e8175d7..20788d736 100644 --- a/lib/sock/posix/posix.c +++ b/lib/sock/posix/posix.c @@ -329,8 +329,14 @@ static int spdk_posix_sock_close(struct spdk_sock *_sock) { struct spdk_posix_sock *sock = __posix_sock(_sock); + int rc; - return close(sock->fd); + rc = close(sock->fd); + if (rc == 0) { + free(sock); + } + + return rc; } static ssize_t diff --git a/lib/sock/sock.c b/lib/sock/sock.c index ed845a211..67f2ff8d1 100644 --- a/lib/sock/sock.c +++ b/lib/sock/sock.c @@ -111,7 +111,6 @@ spdk_sock_close(struct spdk_sock **sock) rc = (*sock)->net_impl->close(*sock); if (rc == 0) { - free(*sock); *sock = NULL; } diff --git a/lib/sock/vpp/vpp.c b/lib/sock/vpp/vpp.c index 840df89cb..d2d5c3aaf 100644 --- a/lib/sock/vpp/vpp.c +++ b/lib/sock/vpp/vpp.c @@ -346,6 +346,7 @@ spdk_vpp_sock_close(struct spdk_sock *_sock) errno = -rc; return -1; } + free(sock); return 0; } diff --git a/test/unit/lib/sock/sock.c/sock_ut.c b/test/unit/lib/sock/sock.c/sock_ut.c index 9a185801b..23c115547 100644 --- a/test/unit/lib/sock/sock.c/sock_ut.c +++ b/test/unit/lib/sock/sock.c/sock_ut.c @@ -144,6 +144,7 @@ spdk_ut_sock_close(struct spdk_sock *_sock) if (sock == g_ut_client_sock) { g_ut_client_sock = NULL; } + free(_sock); return 0; }