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:
parent
c44dd70a58
commit
121b21f4dd
@ -315,29 +315,9 @@ spdk_posix_sock_accept(struct spdk_sock *sock)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
spdk_posix_sock_close(struct spdk_sock **sock)
|
spdk_posix_sock_close(struct spdk_sock *sock)
|
||||||
{
|
{
|
||||||
int rc;
|
return close(sock->fd);
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t
|
static ssize_t
|
||||||
@ -587,28 +567,9 @@ spdk_posix_sock_group_poll_count(struct spdk_sock_group *group, int max_events)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
spdk_posix_sock_group_close(struct spdk_sock_group **group)
|
spdk_posix_sock_group_close(struct spdk_sock_group *group)
|
||||||
{
|
{
|
||||||
int rc;
|
return close(group->fd);
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -638,7 +599,26 @@ spdk_sock_accept(struct spdk_sock *sock)
|
|||||||
int
|
int
|
||||||
spdk_sock_close(struct spdk_sock **sock)
|
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
|
ssize_t
|
||||||
@ -718,5 +698,23 @@ spdk_sock_group_poll_count(struct spdk_sock_group *group, int max_events)
|
|||||||
int
|
int
|
||||||
spdk_sock_group_close(struct spdk_sock_group **group)
|
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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user