summaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2013-03-14 12:10:56 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2013-03-14 12:10:56 (GMT)
commit6b68c04cd613847e4f2bbe1f0cd8a2a13a9d4660 (patch)
tree73a6e42d5c6ac2e62e0812c8b83936506c05c659 /src/client
parent9ab70756af4fb3f0f9c4e287f1b30e0897a19741 (diff)
downloadpowder-6b68c04cd613847e4f2bbe1f0cd8a2a13a9d4660.zip
powder-6b68c04cd613847e4f2bbe1f0cd8a2a13a9d4660.tar.gz
Fix multiple free after merging multiple request objects
Diffstat (limited to 'src/client')
-rw-r--r--src/client/requestbroker/ImageRequest.cpp5
-rw-r--r--src/client/requestbroker/RequestBroker.cpp4
2 files changed, 6 insertions, 3 deletions
diff --git a/src/client/requestbroker/ImageRequest.cpp b/src/client/requestbroker/ImageRequest.cpp
index 6e4f66c..778d8b6 100644
--- a/src/client/requestbroker/ImageRequest.cpp
+++ b/src/client/requestbroker/ImageRequest.cpp
@@ -115,11 +115,14 @@ RequestBroker::ProcessResponse ImageRequest::Process(RequestBroker & rb)
{
//Create a copy, to seperate from the cache
+ std::vector<Request *> children(Children.begin(), Children.end());
+ Children.clear();
+
VideoBuffer * myVB = new VideoBuffer(*image);
myVB->Resize(Width, Height, true);
ResultObject = (void*)myVB;
rb.requestComplete(this);
- for(std::vector<Request*>::iterator childIter = Children.begin(), childEnd = Children.end(); childIter != childEnd; ++childIter)
+ for(std::vector<Request*>::iterator childIter = children.begin(), childEnd = children.end(); childIter != childEnd; ++childIter)
{
if((*childIter)->Type == Request::Image)
{
diff --git a/src/client/requestbroker/RequestBroker.cpp b/src/client/requestbroker/RequestBroker.cpp
index 62e5fd7..68427dc 100644
--- a/src/client/requestbroker/RequestBroker.cpp
+++ b/src/client/requestbroker/RequestBroker.cpp
@@ -9,6 +9,7 @@
#include "ImageRequest.h"
#include "client/Client.h"
#include "client/GameSave.h"
+#include "graphics/Graphics.h"
//Asynchronous Thumbnail render & request processing
@@ -139,8 +140,6 @@ void RequestBroker::FlushThumbQueue()
{
if(CheckRequestListener(completeQueue.front()->Listener))
{
- std::cout << typeid(*this).name() << " Calling listener: " << completeQueue.front()->Listener.second << std::endl;
- std::cout.flush();
completeQueue.front()->Listener.second->OnResponseReady(completeQueue.front()->ResultObject);
}
else
@@ -288,6 +287,7 @@ RequestBroker::Request::~Request()
delete (*iter);
iter++;
}
+ Children.empty();
}
void RequestBroker::Request::Cleanup()
{