Bug 1170993: Manage socket buffers in sub-classes of |UnixSocketBuffer|, r=kmachulis

Different users of the socket I/O code have different requirements
for their I/O buffers. This patch moves the buffer management into
sub-classes of |UnixSocketBuffer|. Each of them can maintain memory
according to its needs.
This commit is contained in:
Thomas Zimmermann
2015-06-08 10:20:17 +02:00
parent 419a9b2d66
commit 8b476d2eef
4 changed files with 84 additions and 53 deletions

View File

@@ -18,27 +18,18 @@ namespace ipc {
// UnixSocketIOBuffer
//
UnixSocketBuffer::UnixSocketBuffer(const void* aData, size_t aSize)
: mSize(aSize)
, mOffset(0)
, mAvailableSpace(aSize)
{
MOZ_ASSERT(aData || !mSize);
mData = new uint8_t[mAvailableSpace];
memcpy(mData, aData, mSize);
}
UnixSocketBuffer::UnixSocketBuffer(size_t aAvailableSpace)
UnixSocketBuffer::UnixSocketBuffer()
: mSize(0)
, mOffset(0)
, mAvailableSpace(aAvailableSpace)
{
mData = new uint8_t[mAvailableSpace];
}
, mAvailableSpace(0)
, mData(nullptr)
{ }
UnixSocketBuffer::~UnixSocketBuffer()
{ }
{
// Make sure that the caller released the buffer's memory.
MOZ_ASSERT(!GetBuffer());
}
const uint8_t*
UnixSocketBuffer::Consume(size_t aLen)
@@ -105,14 +96,6 @@ UnixSocketBuffer::CleanupLeadingSpace()
// UnixSocketIOBuffer
//
UnixSocketIOBuffer::UnixSocketIOBuffer(const void* aData, size_t aSize)
: UnixSocketBuffer(aData, aSize)
{ }
UnixSocketIOBuffer::UnixSocketIOBuffer(size_t aAvailableSpace)
: UnixSocketBuffer(aAvailableSpace)
{ }
UnixSocketIOBuffer::~UnixSocketIOBuffer()
{ }
@@ -121,12 +104,23 @@ UnixSocketIOBuffer::~UnixSocketIOBuffer()
//
UnixSocketRawData::UnixSocketRawData(const void* aData, size_t aSize)
: UnixSocketIOBuffer(aData, aSize)
{ }
{
MOZ_ASSERT(aData || !aSize);
ResetBuffer(static_cast<uint8_t*>(memcpy(new uint8_t[aSize], aData, aSize)),
0, aSize, aSize);
}
UnixSocketRawData::UnixSocketRawData(size_t aSize)
: UnixSocketIOBuffer(aSize)
{ }
{
ResetBuffer(new uint8_t[aSize], 0, 0, aSize);
}
UnixSocketRawData::~UnixSocketRawData()
{
nsAutoArrayPtr<uint8_t> data(GetBuffer());
ResetBuffer(nullptr, 0, 0, 0);
}
ssize_t
UnixSocketRawData::Receive(int aFd)