summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavel Moravec <pmoravec@apache.org>2014-01-16 13:45:07 +0000
committerPavel Moravec <pmoravec@apache.org>2014-01-16 13:45:07 +0000
commit9f55006a1fdd704c7550613ff267b6ba50b8af0b (patch)
treeecd82dd05214b7804c1dd673558d6cb0bab05501
parent3fa06e444faa9c3a28133abdc9b4b0b784ef8703 (diff)
downloadqpid-python-9f55006a1fdd704c7550613ff267b6ba50b8af0b.tar.gz
QPID-5485 Deleting paged queue does not remove underlying file
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1558790 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/cpp/src/qpid/broker/PagedQueue.cpp5
-rw-r--r--qpid/cpp/src/qpid/broker/PagedQueue.h1
-rw-r--r--qpid/cpp/src/qpid/sys/MemoryMappedFile.h4
-rw-r--r--qpid/cpp/src/qpid/sys/posix/MemoryMappedFile.cpp5
-rw-r--r--qpid/cpp/src/qpid/sys/windows/MemoryMappedFile.cpp3
5 files changed, 18 insertions, 0 deletions
diff --git a/qpid/cpp/src/qpid/broker/PagedQueue.cpp b/qpid/cpp/src/qpid/broker/PagedQueue.cpp
index 9701617b01..3186182735 100644
--- a/qpid/cpp/src/qpid/broker/PagedQueue.cpp
+++ b/qpid/cpp/src/qpid/broker/PagedQueue.cpp
@@ -75,6 +75,11 @@ PagedQueue::PagedQueue(const std::string& name_, const std::string& directory, u
QPID_LOG(debug, "PagedQueue[" << path << "]");
}
+PagedQueue::~PagedQueue()
+{
+ file.close(path);
+}
+
size_t PagedQueue::size()
{
size_t total(0);
diff --git a/qpid/cpp/src/qpid/broker/PagedQueue.h b/qpid/cpp/src/qpid/broker/PagedQueue.h
index 4bb4953ba6..7a28ac545a 100644
--- a/qpid/cpp/src/qpid/broker/PagedQueue.h
+++ b/qpid/cpp/src/qpid/broker/PagedQueue.h
@@ -38,6 +38,7 @@ class ProtocolRegistry;
class PagedQueue : public Messages {
public:
PagedQueue(const std::string& name, const std::string& directory, uint maxLoaded, uint pageFactor, ProtocolRegistry& protocols);
+ ~PagedQueue();
size_t size();
bool deleted(const QueueCursor&);
void publish(const Message& added);
diff --git a/qpid/cpp/src/qpid/sys/MemoryMappedFile.h b/qpid/cpp/src/qpid/sys/MemoryMappedFile.h
index 84548a5f6f..43e4c852af 100644
--- a/qpid/cpp/src/qpid/sys/MemoryMappedFile.h
+++ b/qpid/cpp/src/qpid/sys/MemoryMappedFile.h
@@ -40,6 +40,10 @@ class MemoryMappedFile {
*/
QPID_COMMON_EXTERN std::string open(const std::string& name, const std::string& directory);
/**
+ * Closes and removes the file that can be mapped by region into memory
+ */
+ QPID_COMMON_EXTERN void close(const std::string& path);
+ /**
* Returns the page size
*/
QPID_COMMON_EXTERN size_t getPageSize();
diff --git a/qpid/cpp/src/qpid/sys/posix/MemoryMappedFile.cpp b/qpid/cpp/src/qpid/sys/posix/MemoryMappedFile.cpp
index b60aaae2e1..477ace5451 100644
--- a/qpid/cpp/src/qpid/sys/posix/MemoryMappedFile.cpp
+++ b/qpid/cpp/src/qpid/sys/posix/MemoryMappedFile.cpp
@@ -71,6 +71,11 @@ std::string MemoryMappedFile::open(const std::string& name, const std::string& d
state->fd = fd;
return path;
}
+void MemoryMappedFile::close(const std::string& path)
+{
+ ::close(state->fd);
+ ::unlink(path.c_str());
+}
size_t MemoryMappedFile::getPageSize()
{
return ::sysconf(_SC_PAGE_SIZE);
diff --git a/qpid/cpp/src/qpid/sys/windows/MemoryMappedFile.cpp b/qpid/cpp/src/qpid/sys/windows/MemoryMappedFile.cpp
index ba3358ae23..9bb3fa2320 100644
--- a/qpid/cpp/src/qpid/sys/windows/MemoryMappedFile.cpp
+++ b/qpid/cpp/src/qpid/sys/windows/MemoryMappedFile.cpp
@@ -31,6 +31,9 @@ std::string MemoryMappedFile::open(const std::string& /*name*/, const std::strin
{
return std::string();
}
+void MemoryMappedFile::close(const std::string& /*path*/)
+{
+}
size_t MemoryMappedFile::getPageSize()
{
return 0;