diff options
Diffstat (limited to 'cpp/src/qpid/DataDir.cpp')
-rw-r--r-- | cpp/src/qpid/DataDir.cpp | 24 |
1 files changed, 6 insertions, 18 deletions
diff --git a/cpp/src/qpid/DataDir.cpp b/cpp/src/qpid/DataDir.cpp index 879f4de202..18b52b9b8f 100644 --- a/cpp/src/qpid/DataDir.cpp +++ b/cpp/src/qpid/DataDir.cpp @@ -26,13 +26,13 @@ #include <sys/file.h> #include <fcntl.h> #include <cerrno> +#include <unistd.h> namespace qpid { DataDir::DataDir (std::string path) : enabled (!path.empty ()), - dirPath (path), - dirFd(-1) + dirPath (path) { if (!enabled) { @@ -50,24 +50,12 @@ DataDir::DataDir (std::string path) : else throw Exception ("Data directory not found: " + path); } - int dirFd = ::open(path.c_str(), 0); - if (dirFd == -1) - throw Exception(QPID_MSG("Can't open data directory: " << dirPath << ": " << strError(errno))); - int result = ::flock(dirFd, LOCK_EX | LOCK_NB); - if (result != 0) { - if (errno == EWOULDBLOCK) - throw Exception(QPID_MSG("Data directory locked by another process: " << path)); - throw Exception(QPID_MSG("Cannot lock data directory: " << strError(errno))); - } - QPID_LOG (info, "Locked data directory: " << dirPath); + std::string lockFileName(path); + lockFileName += "/lock"; + lockFile = std::auto_ptr<sys::LockFile>(new sys::LockFile(lockFileName, true)); } -DataDir::~DataDir () { - if (dirFd != -1) { - ::close(dirFd); // Closing the fd unlocks the directory. - QPID_LOG (info, "Unlocked data directory: " << dirPath); - } -} +DataDir::~DataDir () {} } // namespace qpid |