// 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);
}
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_));
// 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