mirror of https://github.com/aria2/aria2
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.hpull/1/head
parent
fe8fea56ca
commit
f0938cf1d6
|
@ -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>
|
2010-03-05 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
Only execute RequestGroupMan::fillRequestGroupFromReserver() when
|
Only execute RequestGroupMan::fillRequestGroupFromReserver() when
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
#include "SocketBuffer.h"
|
#include "SocketBuffer.h"
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
#include "SocketCore.h"
|
#include "SocketCore.h"
|
||||||
#include "DlAbortEx.h"
|
#include "DlAbortEx.h"
|
||||||
|
@ -46,16 +47,20 @@ namespace aria2 {
|
||||||
SocketBuffer::SocketBuffer(const SharedHandle<SocketCore>& socket):
|
SocketBuffer::SocketBuffer(const SharedHandle<SocketCore>& socket):
|
||||||
_socket(socket), _offset(0) {}
|
_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)
|
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)
|
void SocketBuffer::pushStr(const std::string& data)
|
||||||
{
|
{
|
||||||
_bufq.push_back(BufEntry::createStr(data));
|
_bufq.push_back(BufEntry(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t SocketBuffer::send()
|
ssize_t SocketBuffer::send()
|
||||||
|
|
|
@ -67,22 +67,11 @@ private:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static BufEntry createBytes(unsigned char* bytes, size_t len)
|
BufEntry(unsigned char* bytes, size_t len):
|
||||||
{
|
type(TYPE_BYTES), bytes(bytes), bytesLen(len) {}
|
||||||
BufEntry b;
|
|
||||||
b.type = TYPE_BYTES;
|
|
||||||
b.bytes = bytes;
|
|
||||||
b.bytesLen = len;
|
|
||||||
return b;
|
|
||||||
}
|
|
||||||
|
|
||||||
static BufEntry createStr(const std::string& str)
|
BufEntry(const std::string& str):
|
||||||
{
|
type(TYPE_STR), str(new std::string(str)) {}
|
||||||
BufEntry b;
|
|
||||||
b.type = TYPE_STR;
|
|
||||||
b.str = new std::string(str);
|
|
||||||
return b;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
SharedHandle<SocketCore> _socket;
|
SharedHandle<SocketCore> _socket;
|
||||||
|
|
Loading…
Reference in New Issue