2010-03-05 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

Fixed memory leak in SocketBuffer when _bufq is not empty when
	SocketBuffer is deleted. Added BufEntry constructor and deleted
	static factory functions.
	* src/SocketBuffer.cc
	* src/SocketBuffer.h
pull/1/head
Tatsuhiro Tsujikawa 2010-03-05 14:11:00 +00:00
parent fe8fea56ca
commit f0938cf1d6
3 changed files with 20 additions and 18 deletions

View File

@ -1,3 +1,11 @@
2010-03-05 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Fixed memory leak in SocketBuffer when _bufq is not empty when
SocketBuffer is deleted. Added BufEntry constructor and deleted
static factory functions.
* src/SocketBuffer.cc
* src/SocketBuffer.h
2010-03-05 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Only execute RequestGroupMan::fillRequestGroupFromReserver() when

View File

@ -35,6 +35,7 @@
#include "SocketBuffer.h"
#include <cassert>
#include <algorithm>
#include "SocketCore.h"
#include "DlAbortEx.h"
@ -46,16 +47,20 @@ namespace aria2 {
SocketBuffer::SocketBuffer(const SharedHandle<SocketCore>& socket):
_socket(socket), _offset(0) {}
SocketBuffer::~SocketBuffer() {}
SocketBuffer::~SocketBuffer()
{
std::for_each(_bufq.begin(), _bufq.end(),
std::mem_fun_ref(&BufEntry::deleteBuf));
}
void SocketBuffer::pushBytes(unsigned char* bytes, size_t len)
{
_bufq.push_back(BufEntry::createBytes(bytes, len));
_bufq.push_back(BufEntry(bytes, len));
}
void SocketBuffer::pushStr(const std::string& data)
{
_bufq.push_back(BufEntry::createStr(data));
_bufq.push_back(BufEntry(data));
}
ssize_t SocketBuffer::send()

View File

@ -67,22 +67,11 @@ private:
}
}
static BufEntry createBytes(unsigned char* bytes, size_t len)
{
BufEntry b;
b.type = TYPE_BYTES;
b.bytes = bytes;
b.bytesLen = len;
return b;
}
BufEntry(unsigned char* bytes, size_t len):
type(TYPE_BYTES), bytes(bytes), bytesLen(len) {}
static BufEntry createStr(const std::string& str)
{
BufEntry b;
b.type = TYPE_STR;
b.str = new std::string(str);
return b;
}
BufEntry(const std::string& str):
type(TYPE_STR), str(new std::string(str)) {}
};
SharedHandle<SocketCore> _socket;