Skip to content

Commit

Permalink
[#3506] Final improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
fxdupont committed Sep 20, 2024
1 parent 9fda4a5 commit b8f70fb
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 10 deletions.
3 changes: 3 additions & 0 deletions changelog_unreleased/3506-unix-control-socket
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[func] fdupont
Reorganized UNIX control socket code.
(Gitlab #3506)
19 changes: 9 additions & 10 deletions src/lib/config/unix_command_mgr.cc
Original file line number Diff line number Diff line change
Expand Up @@ -573,19 +573,20 @@ UnixCommandMgrImpl::openCommandSocket(const isc::data::ConstElementPtr& socket_i

// First let's open lock file.
std::string lock_name = getLockName();
int new_lock_fd = open(lock_name.c_str(), O_RDONLY | O_CREAT, 0600);
if (new_lock_fd == -1) {
lock_fd_ = open(lock_name.c_str(), O_RDONLY | O_CREAT, 0600);
if (lock_fd_ == -1) {
std::string errmsg = strerror(errno);
isc_throw(SocketError, "cannot create socket lockfile, "
<< lock_name << ", : " << errmsg);
}

// Try to acquire lock. If we can't somebody else is actively
// using it.
int ret = flock(new_lock_fd, LOCK_EX | LOCK_NB);
int ret = flock(lock_fd_, LOCK_EX | LOCK_NB);
if (ret != 0) {
std::string errmsg = strerror(errno);
close(new_lock_fd);
close(lock_fd_);
lock_fd_ = -1;
isc_throw(SocketError, "cannot lock socket lockfile, "
<< lock_name << ", : " << errmsg);
}
Expand All @@ -597,12 +598,6 @@ UnixCommandMgrImpl::openCommandSocket(const isc::data::ConstElementPtr& socket_i
LOG_INFO(command_logger, COMMAND_ACCEPTOR_START)
.arg(socket_name_);

// Close previous lock to avoid file descriptor leak.
if (lock_fd_ != -1) {
close(lock_fd_);
}
lock_fd_ = new_lock_fd;

try {
// Start asynchronous acceptor service.
acceptor_.reset(new UnixDomainSocketAcceptor(io_service_));
Expand Down Expand Up @@ -639,6 +634,10 @@ UnixCommandMgrImpl::closeCommandSocket() {
// the server. This connection will be held until the UnixCommandMgr
// responds to such request.
connection_pool_.stopAll();
if (lock_fd_ != -1) {
close(lock_fd_);
lock_fd_ = -1;
}
}

void
Expand Down

0 comments on commit b8f70fb

Please sign in to comment.