From 9f55006a1fdd704c7550613ff267b6ba50b8af0b Mon Sep 17 00:00:00 2001 From: Pavel Moravec Date: Thu, 16 Jan 2014 13:45:07 +0000 Subject: 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 --- qpid/cpp/src/qpid/broker/PagedQueue.cpp | 5 +++++ qpid/cpp/src/qpid/broker/PagedQueue.h | 1 + qpid/cpp/src/qpid/sys/MemoryMappedFile.h | 4 ++++ qpid/cpp/src/qpid/sys/posix/MemoryMappedFile.cpp | 5 +++++ qpid/cpp/src/qpid/sys/windows/MemoryMappedFile.cpp | 3 +++ 5 files changed, 18 insertions(+) (limited to 'qpid/cpp/src') 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 @@ -39,6 +39,10 @@ class MemoryMappedFile { * Opens a file that can be mapped by region into memory */ 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 */ 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; -- cgit v1.2.1