From 1b4c02dc9fbef138f7ed59550d533fe3ae13017f Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Tue, 8 Jul 2008 15:56:04 +0000 Subject: QPID-1148 - from Manuel Tiera Lock file abstraction in sys/ with implementation portable to Linux and Solaris. Changes by myself: - Makefile.am - must be updated for any new/renamed/removed source files. - Exception.h, Daemon.h, LockFile.h: Replaced throwIf() with if (...) throw ErrnoException(...) The idiom throwIf(call-system-function(), "msg", errno) is incorret (my fault, not Manuels). It assumes the first argument that makes a system call call will be evaluated before the last one which fetches errno. This may not be true on some compilers/platforms. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@674865 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/DataDir.cpp | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) (limited to 'cpp/src/qpid/DataDir.cpp') 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 #include #include +#include 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(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 -- cgit v1.2.1