Run check_exit also on deferred stop. Now vitastor-nfs should finally always stop on umount
This commit is contained in:
@@ -528,11 +528,9 @@ void nfs_proxy_t::do_accept(int listen_fd)
|
|||||||
// Handle incoming event
|
// Handle incoming event
|
||||||
if (epoll_events & EPOLLRDHUP)
|
if (epoll_events & EPOLLRDHUP)
|
||||||
{
|
{
|
||||||
auto parent = cli->parent;
|
if (cli->parent->trace)
|
||||||
if (parent->trace)
|
|
||||||
fprintf(stderr, "Client %d disconnected\n", nfs_fd);
|
fprintf(stderr, "Client %d disconnected\n", nfs_fd);
|
||||||
cli->stop();
|
cli->stop();
|
||||||
parent->check_exit();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
cli->epoll_events |= epoll_events;
|
cli->epoll_events |= epoll_events;
|
||||||
@@ -781,11 +779,13 @@ void nfs_client_t::stop()
|
|||||||
stopped = true;
|
stopped = true;
|
||||||
if (refs <= 0)
|
if (refs <= 0)
|
||||||
{
|
{
|
||||||
|
auto parent = this->parent;
|
||||||
parent->rpc_clients.erase(nfs_fd);
|
parent->rpc_clients.erase(nfs_fd);
|
||||||
parent->active_connections--;
|
parent->active_connections--;
|
||||||
parent->epmgr->tfd->set_fd_handler(nfs_fd, true, NULL);
|
parent->epmgr->tfd->set_fd_handler(nfs_fd, true, NULL);
|
||||||
close(nfs_fd);
|
close(nfs_fd);
|
||||||
delete this;
|
delete this;
|
||||||
|
parent->check_exit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user