24 #include <sys/types.h>
29 namespace interprocess {
41 InterprocessSyncFile::do_lock(
int cmd,
short l_type) {
46 std::string lockfile_path = LOCKFILE_DIR;
48 const char*
const env = getenv(
"KEA_LOCKFILE_DIR");
53 lockfile_path +=
"/" +
task_name_ +
"_lockfile";
57 const mode_t mode = umask(S_IXUSR | S_IXGRP | S_IXOTH);
58 fd_ = open(lockfile_path.c_str(), O_CREAT | O_RDWR,
59 S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
63 std::stringstream tmp;
68 tmp <<
"Unable to use interprocess sync lockfile ("
69 << std::strerror(errno) <<
"): " << lockfile_path;
70 std::cerr << tmp.str() << std::endl;
73 isc_throw(InterprocessSyncFileError, tmp.str());
81 lock.l_whence = SEEK_SET;
85 return (fcntl(
fd_, cmd, &
lock) == 0);
94 if (do_lock(F_SETLKW, F_WRLCK)) {
108 if (do_lock(F_SETLK, F_WRLCK)) {
122 if (do_lock(F_SETLKW, F_UNLCK)) {
virtual ~InterprocessSyncFile()
Destructor.
bool lock()
Acquire the lock (blocks if something else has acquired a lock on the same task name) ...
bool is_locked_
Is the lock taken?
bool tryLock()
Try to acquire a lock (doesn't block)
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
bool unlock()
Release the lock.
Defines the logger used by the top-level component of kea-dhcp-ddns.
const std::string task_name_
The task name.