net: move common close code out of posix_sock functions

Parts of the close code (for both sock and sock_group)
is generic and will apply to every net implementation
(POSIX, VPP, etc.) - so move that generic code now.

Signed-off-by: Jim Harris <james.r.harris@intel.com>
Change-Id: I50b5b272b6af219a516c18c41eee5a2e00bf034d

Reviewed-on: https://review.gerrithub.io/400330
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
Jim Harris 2018-02-16 13:53:47 -07:00 committed by Daniel Verkamp
parent c44dd70a58
commit 121b21f4dd

View File

@ -315,29 +315,9 @@ spdk_posix_sock_accept(struct spdk_sock *sock)
}
static int
spdk_posix_sock_close(struct spdk_sock **sock)
spdk_posix_sock_close(struct spdk_sock *sock)
{
int rc;
if (*sock == NULL) {
errno = EBADF;
return -1;
}
if ((*sock)->cb_fn != NULL) {
/* This sock is still part of a sock_group. */
errno = EBUSY;
return -1;
}
rc = close((*sock)->fd);
if (rc == 0) {
free(*sock);
*sock = NULL;
}
return rc;
return close(sock->fd);
}
static ssize_t
@ -587,28 +567,9 @@ spdk_posix_sock_group_poll_count(struct spdk_sock_group *group, int max_events)
}
static int
spdk_posix_sock_group_close(struct spdk_sock_group **group)
spdk_posix_sock_group_close(struct spdk_sock_group *group)
{
int rc;
if (*group == NULL) {
errno = EBADF;
return -1;
}
if (!TAILQ_EMPTY(&(*group)->socks)) {
errno = EBUSY;
return -1;
}
rc = close((*group)->fd);
if (rc == 0) {
free(*group);
*group = NULL;
}
return rc;
return close(group->fd);
}
int
@ -638,7 +599,26 @@ spdk_sock_accept(struct spdk_sock *sock)
int
spdk_sock_close(struct spdk_sock **sock)
{
return spdk_posix_sock_close(sock);
int rc;
if (*sock == NULL) {
errno = EBADF;
return -1;
}
if ((*sock)->cb_fn != NULL) {
/* This sock is still part of a sock_group. */
errno = EBUSY;
return -1;
}
rc = spdk_posix_sock_close(*sock);
if (rc == 0) {
free(*sock);
*sock = NULL;
}
return rc;
}
ssize_t
@ -718,5 +698,23 @@ spdk_sock_group_poll_count(struct spdk_sock_group *group, int max_events)
int
spdk_sock_group_close(struct spdk_sock_group **group)
{
return spdk_posix_sock_group_close(group);
int rc;
if (*group == NULL) {
errno = EBADF;
return -1;
}
if (!TAILQ_EMPTY(&(*group)->socks)) {
errno = EBUSY;
return -1;
}
rc = spdk_posix_sock_group_close(*group);
if (rc == 0) {
free(*group);
*group = NULL;
}
return rc;
}