summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/DataDir.cpp
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2008-07-08 15:56:04 +0000
committerAlan Conway <aconway@apache.org>2008-07-08 15:56:04 +0000
commit1b4c02dc9fbef138f7ed59550d533fe3ae13017f (patch)
tree3b82530feeac8cccbcba94ad26f776ce07a9651f /cpp/src/qpid/DataDir.cpp
parent43664d69dc90c128ad3f73327ac8331b02d7a38c (diff)
downloadqpid-python-1b4c02dc9fbef138f7ed59550d533fe3ae13017f.tar.gz
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
Diffstat (limited to 'cpp/src/qpid/DataDir.cpp')
-rw-r--r--cpp/src/qpid/DataDir.cpp24
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