diff options
| author | Kim van der Riet <kpvdr@apache.org> | 2012-08-27 15:40:33 +0000 |
|---|---|---|
| committer | Kim van der Riet <kpvdr@apache.org> | 2012-08-27 15:40:33 +0000 |
| commit | 868ce7469262d6fd2fe3f2e7f04cfe7af654d59f (patch) | |
| tree | 63e6b5e62554609beb21e8c8d0610569f36d2743 /cpp/src/qpid/sys/posix | |
| parent | 2e5ff8f1b328831043e6d7e323249d62187234c6 (diff) | |
| download | qpid-python-868ce7469262d6fd2fe3f2e7f04cfe7af654d59f.tar.gz | |
QPID-3858: Updated code to include recent refactoring by Gordon (gsim) - see QPID-4178.
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/asyncstore@1377715 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/sys/posix')
| -rw-r--r-- | cpp/src/qpid/sys/posix/AsynchIO.cpp | 25 | ||||
| -rwxr-xr-x | cpp/src/qpid/sys/posix/SystemInfo.cpp | 2 |
2 files changed, 18 insertions, 9 deletions
diff --git a/cpp/src/qpid/sys/posix/AsynchIO.cpp b/cpp/src/qpid/sys/posix/AsynchIO.cpp index 01ff8b6bfa..31355627cd 100644 --- a/cpp/src/qpid/sys/posix/AsynchIO.cpp +++ b/cpp/src/qpid/sys/posix/AsynchIO.cpp @@ -40,6 +40,7 @@ #include <boost/bind.hpp> #include <boost/lexical_cast.hpp> +#include <boost/shared_array.hpp> namespace qpid { namespace sys { @@ -239,6 +240,7 @@ public: virtual void queueForDeletion(); virtual void start(Poller::shared_ptr poller); + virtual void createBuffers(uint32_t size); virtual void queueReadBuffer(BufferBase* buff); virtual void unread(BufferBase* buff); virtual void queueWrite(BufferBase* buff); @@ -270,6 +272,8 @@ private: const Socket& socket; std::deque<BufferBase*> bufferQueue; std::deque<BufferBase*> writeQueue; + std::vector<BufferBase> buffers; + boost::shared_array<char> bufferMemory; bool queuedClose; /** * This flag is used to detect and handle concurrency between @@ -309,15 +313,7 @@ AsynchIO::AsynchIO(const Socket& s, s.setNonblocking(); } -struct deleter -{ - template <typename T> - void operator()(T *ptr){ delete ptr;} -}; - AsynchIO::~AsynchIO() { - std::for_each( bufferQueue.begin(), bufferQueue.end(), deleter()); - std::for_each( writeQueue.begin(), writeQueue.end(), deleter()); } void AsynchIO::queueForDeletion() { @@ -328,6 +324,19 @@ void AsynchIO::start(Poller::shared_ptr poller) { DispatchHandle::startWatch(poller); } +void AsynchIO::createBuffers(uint32_t size) { + // Allocate all the buffer memory at once + bufferMemory.reset(new char[size*BufferCount]); + + // Create the Buffer structs in a vector + // And push into the buffer queue + buffers.reserve(BufferCount); + for (uint32_t i = 0; i < BufferCount; i++) { + buffers.push_back(BufferBase(&bufferMemory[i*size], size)); + queueReadBuffer(&buffers[i]); + } +} + void AsynchIO::queueReadBuffer(BufferBase* buff) { assert(buff); buff->dataStart = 0; diff --git a/cpp/src/qpid/sys/posix/SystemInfo.cpp b/cpp/src/qpid/sys/posix/SystemInfo.cpp index 2b1bbb97df..cfd2c64aee 100755 --- a/cpp/src/qpid/sys/posix/SystemInfo.cpp +++ b/cpp/src/qpid/sys/posix/SystemInfo.cpp @@ -91,7 +91,7 @@ void SystemInfo::getLocalIpAddresses (uint16_t port, // * The scope id is illegal in URL syntax // * Clients won't be able to use a link local address // without adding their own (potentially different) scope id - sockaddr_in6* sa6 = (sockaddr_in6*)(ifap->ifa_addr); + sockaddr_in6* sa6 = (sockaddr_in6*)((void*)ifap->ifa_addr); if (IN6_IS_ADDR_LINKLOCAL(&sa6->sin6_addr)) break; // Fallthrough } |
