* Fixed up various memory leaks (mainly serialiser cleanup).

* Added pthread_detach() to allow proper thread cleanup (affected ony Linux!)



git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@460 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
drbob 2008-04-02 13:55:45 +00:00
parent e3df41b1da
commit d69c2f72f1
9 changed files with 36 additions and 8 deletions

View File

@ -217,6 +217,7 @@ void stunPeer(std::string id, struct sockaddr_in peeraddr)
void *data = (void *) pub; void *data = (void *) pub;
pthread_create(&tid, 0, &doStunPeer, data); pthread_create(&tid, 0, &doStunPeer, data);
pthread_detach(tid);
return; return;
@ -361,6 +362,7 @@ int main(int argc, char **argv)
#endif #endif
srand(time(NULL)); /* randomise! */
if (!setOwnId) if (!setOwnId)
{ {

View File

@ -179,6 +179,7 @@ bool OpenDHTMgr::publishDHT(std::string key, std::string value, uint32_t ttl)
void *data = (void *) pub; void *data = (void *) pub;
pthread_create(&tid, 0, &doDhtPublish, data); pthread_create(&tid, 0, &doDhtPublish, data);
pthread_detach(tid); /* so memory is reclaimed in linux */
return true; return true;
} }
@ -195,6 +196,7 @@ bool OpenDHTMgr::searchDHT(std::string key)
void *data = (void *) dht; void *data = (void *) dht;
pthread_create(&tid, 0, &doDhtSearch, data); pthread_create(&tid, 0, &doDhtSearch, data);
pthread_detach(tid); /* so memory is reclaimed in linux */
return true; return true;
} }

View File

@ -185,6 +185,8 @@ void p3ConfigMgr::saveConfiguration()
#endif #endif
} }
delete signbio;
} }
@ -332,6 +334,7 @@ void p3ConfigMgr::loadConfiguration()
} }
} }
delete item;
#ifdef CONFIG_DEBUG #ifdef CONFIG_DEBUG
std::cerr << "p3ConfigMgr::loadConfiguration() Done!"; std::cerr << "p3ConfigMgr::loadConfiguration() Done!";

View File

@ -113,6 +113,9 @@ pqiarchive::~pqiarchive()
delete bio; delete bio;
} }
if (rsSerialiser)
delete rsSerialiser;
if (nextPkt) if (nextPkt)
{ {
delete nextPkt; delete nextPkt;

View File

@ -88,6 +88,11 @@ BinFileInterface::~BinFileInterface()
{ {
fclose(buf); fclose(buf);
} }
if (hash)
{
delete hash;
}
} }
int BinFileInterface::close() int BinFileInterface::close()
@ -183,11 +188,14 @@ BinMemInterface::BinMemInterface(const void *data, const int defsize, int flags)
} }
BinMemInterface::~BinMemInterface() BinMemInterface::~BinMemInterface()
{ {
if (buf) if (buf)
free(buf); free(buf);
return;
} if (hash)
delete hash;
return;
}
int BinMemInterface::close() int BinMemInterface::close()
{ {

View File

@ -40,6 +40,13 @@ class pqihash
doHash = true; doHash = true;
} }
~pqihash()
{
delete[] sha_hash;
delete sha_ctx;
}
void addData(void *data, uint32_t len) void addData(void *data, uint32_t len)
{ {
if (doHash) if (doHash)
@ -68,9 +75,6 @@ void Complete(std::string &hash)
hash = endHash; hash = endHash;
doHash = false; doHash = false;
delete []sha_hash;
delete sha_ctx;
return; return;
} }

View File

@ -104,6 +104,10 @@ pqistreamer::~pqistreamer()
delete bio; delete bio;
} }
/* clean up serialiser */
if (rsSerialiser)
delete rsSerialiser;
// clean up outgoing. (cntrl packets) // clean up outgoing. (cntrl packets)
while(out_pkt.size() > 0) while(out_pkt.size() > 0)
{ {

View File

@ -102,6 +102,7 @@ int RsServer::UpdateAllTransfers()
ti.downloadStatus = (*it) -> state; ti.downloadStatus = (*it) -> state;
transfers.push_back(ti); transfers.push_back(ti);
delete (*it);
} }
iface.setChanged(RsIface::Transfer); iface.setChanged(RsIface::Transfer);

View File

@ -459,6 +459,7 @@ void p3Ranking::addRankMsg(RsRankLinkMsg *msg)
} }
else else
{ {
delete msg;
#ifdef RANK_DEBUG #ifdef RANK_DEBUG
std::cerr << "p3Ranking::addRankMsg() Old Comment ignoring"; std::cerr << "p3Ranking::addRankMsg() Old Comment ignoring";
std::cerr << std::endl; std::cerr << std::endl;