- more memory cleanup and thread cleanup (found using valgrind)
This commit is contained in:
parent
a3bf4bfe32
commit
43ed4553ea
|
@ -160,6 +160,13 @@ static void cleanupProcessObjects() {
|
||||||
//deleteMapValues(crcFactionPreviewTextureCache.begin(),crcFactionPreviewTextureCache.end());
|
//deleteMapValues(crcFactionPreviewTextureCache.begin(),crcFactionPreviewTextureCache.end());
|
||||||
crcFactionPreviewTextureCache.clear();
|
crcFactionPreviewTextureCache.clear();
|
||||||
|
|
||||||
|
time_t elapsed = time(NULL);
|
||||||
|
for(;Thread::getThreadList().size() > 0 &&
|
||||||
|
difftime(time(NULL),elapsed) <= 10;) {
|
||||||
|
sleep(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
SystemFlags::globalCleanupHTTP();
|
||||||
CacheManager::cleanupMutexes();
|
CacheManager::cleanupMutexes();
|
||||||
|
|
||||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
|
@ -643,7 +643,9 @@ void MenuStateCustomGame::cleanup() {
|
||||||
}
|
}
|
||||||
publishToMasterserverThread = NULL;
|
publishToMasterserverThread = NULL;
|
||||||
}
|
}
|
||||||
else if(publishToMasterserverThread->canShutdown(true) == true &&
|
else {
|
||||||
|
publishToMasterserverThread->signalQuit();
|
||||||
|
if(publishToMasterserverThread->canShutdown(true) == true &&
|
||||||
publishToMasterserverThread->shutdownAndWait() == true) {
|
publishToMasterserverThread->shutdownAndWait() == true) {
|
||||||
delete publishToMasterserverThread;
|
delete publishToMasterserverThread;
|
||||||
}
|
}
|
||||||
|
|
|
@ -270,7 +270,7 @@ NetworkMessageLaunch::NetworkMessageLaunch(const GameSettings *gameSettings,int8
|
||||||
data.pathFinderType = gameSettings->getPathFinderType();
|
data.pathFinderType = gameSettings->getPathFinderType();
|
||||||
data.flagTypes1 = gameSettings->getFlagTypes1();
|
data.flagTypes1 = gameSettings->getFlagTypes1();
|
||||||
|
|
||||||
for(int i= 0; i<data.factionCount; ++i) {
|
for(int i= 0; i < data.factionCount; ++i) {
|
||||||
data.factionTypeNames[i]= gameSettings->getFactionTypeName(i);
|
data.factionTypeNames[i]= gameSettings->getFactionTypeName(i);
|
||||||
data.networkPlayerNames[i]= gameSettings->getNetworkPlayerName(i);
|
data.networkPlayerNames[i]= gameSettings->getNetworkPlayerName(i);
|
||||||
data.networkPlayerStatuses[i] = gameSettings->getNetworkPlayerStatuses(i);
|
data.networkPlayerStatuses[i] = gameSettings->getNetworkPlayerStatuses(i);
|
||||||
|
@ -280,6 +280,16 @@ NetworkMessageLaunch::NetworkMessageLaunch(const GameSettings *gameSettings,int8
|
||||||
data.teams[i]= gameSettings->getTeam(i);
|
data.teams[i]= gameSettings->getTeam(i);
|
||||||
data.startLocationIndex[i]= gameSettings->getStartLocationIndex(i);
|
data.startLocationIndex[i]= gameSettings->getStartLocationIndex(i);
|
||||||
}
|
}
|
||||||
|
for(int i= data.factionCount; i < GameConstants::maxPlayers; ++i) {
|
||||||
|
data.factionTypeNames[i]= "";
|
||||||
|
data.networkPlayerNames[i]= "";
|
||||||
|
data.networkPlayerStatuses[i] = 0;
|
||||||
|
data.networkPlayerLanguages[i] = "";
|
||||||
|
data.factionControls[i]= 0;
|
||||||
|
data.resourceMultiplierIndex[i]= 0;
|
||||||
|
data.teams[i]= -1;
|
||||||
|
data.startLocationIndex[i]= 0;
|
||||||
|
}
|
||||||
|
|
||||||
data.aiAcceptSwitchTeamPercentChance = gameSettings->getAiAcceptSwitchTeamPercentChance();
|
data.aiAcceptSwitchTeamPercentChance = gameSettings->getAiAcceptSwitchTeamPercentChance();
|
||||||
data.masterserver_admin = gameSettings->getMasterserver_admin();
|
data.masterserver_admin = gameSettings->getMasterserver_admin();
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//#include "util.h"
|
//#include "util.h"
|
||||||
|
#include <vector>
|
||||||
#include "leak_dumper.h"
|
#include "leak_dumper.h"
|
||||||
|
|
||||||
// =====================================================
|
// =====================================================
|
||||||
|
@ -36,7 +37,9 @@ using namespace Shared::PlatformCommon;
|
||||||
|
|
||||||
namespace Shared { namespace Platform {
|
namespace Shared { namespace Platform {
|
||||||
|
|
||||||
class Thread{
|
class Mutex;
|
||||||
|
|
||||||
|
class Thread {
|
||||||
public:
|
public:
|
||||||
enum Priority {
|
enum Priority {
|
||||||
pIdle = 0,
|
pIdle = 0,
|
||||||
|
@ -49,10 +52,15 @@ public:
|
||||||
private:
|
private:
|
||||||
SDL_Thread* thread;
|
SDL_Thread* thread;
|
||||||
|
|
||||||
|
static Mutex mutexthreadList;
|
||||||
|
static std::vector<Thread *> threadList;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Thread();
|
Thread();
|
||||||
virtual ~Thread();
|
virtual ~Thread();
|
||||||
|
|
||||||
|
static std::vector<Thread *> getThreadList();
|
||||||
|
|
||||||
void start();
|
void start();
|
||||||
virtual void execute()=0;
|
virtual void execute()=0;
|
||||||
void setPriority(Thread::Priority threadPriority);
|
void setPriority(Thread::Priority threadPriority);
|
||||||
|
|
|
@ -14,16 +14,23 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#include "noimpl.h"
|
#include "noimpl.h"
|
||||||
|
#include <algorithm>
|
||||||
#include "platform_common.h"
|
#include "platform_common.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
namespace Shared{ namespace Platform{
|
namespace Shared { namespace Platform {
|
||||||
|
|
||||||
|
Mutex Thread::mutexthreadList;
|
||||||
|
std::vector<Thread *> Thread::threadList;
|
||||||
|
|
||||||
// =====================================
|
// =====================================
|
||||||
// Threads
|
// Threads
|
||||||
// =====================================
|
// =====================================
|
||||||
Thread::Thread() {
|
Thread::Thread() {
|
||||||
|
MutexSafeWrapper safeMutex(&Thread::mutexthreadList);
|
||||||
|
Thread::threadList.push_back(this);
|
||||||
|
safeMutex.ReleaseLock();
|
||||||
thread = NULL;
|
thread = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,6 +39,19 @@ Thread::~Thread() {
|
||||||
SDL_WaitThread(thread, NULL);
|
SDL_WaitThread(thread, NULL);
|
||||||
thread = NULL;
|
thread = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MutexSafeWrapper safeMutex(&Thread::mutexthreadList);
|
||||||
|
std::vector<Thread *>::iterator iterFind = std::find(Thread::threadList.begin(),Thread::threadList.end(),this);
|
||||||
|
Thread::threadList.erase(iterFind);
|
||||||
|
safeMutex.ReleaseLock();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<Thread *> Thread::getThreadList() {
|
||||||
|
std::vector<Thread *> result;
|
||||||
|
MutexSafeWrapper safeMutex(&Thread::mutexthreadList);
|
||||||
|
result = threadList;
|
||||||
|
safeMutex.ReleaseLock();
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Thread::start() {
|
void Thread::start() {
|
||||||
|
|
|
@ -177,6 +177,7 @@ std::string SystemFlags::getHTTP(std::string URL,CURL *handle,int timeOut,CURLco
|
||||||
CURL *SystemFlags::initHTTP() {
|
CURL *SystemFlags::initHTTP() {
|
||||||
if(SystemFlags::curl_global_init_called == false) {
|
if(SystemFlags::curl_global_init_called == false) {
|
||||||
SystemFlags::curl_global_init_called = true;
|
SystemFlags::curl_global_init_called = true;
|
||||||
|
//printf("HTTP init\n");
|
||||||
CURLcode result = curl_global_init(CURL_GLOBAL_ALL);
|
CURLcode result = curl_global_init(CURL_GLOBAL_ALL);
|
||||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d] curl_global_init called and returned: result %d [%s]\n",__FILE__,__FUNCTION__,__LINE__,result,curl_easy_strerror(result));
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d] curl_global_init called and returned: result %d [%s]\n",__FILE__,__FUNCTION__,__LINE__,result,curl_easy_strerror(result));
|
||||||
//printf("In [%s::%s Line %d] curl_global_init called and returned: result %d [%s]\n",__FILE__,__FUNCTION__,__LINE__,result,curl_easy_strerror(result));
|
//printf("In [%s::%s Line %d] curl_global_init called and returned: result %d [%s]\n",__FILE__,__FUNCTION__,__LINE__,result,curl_easy_strerror(result));
|
||||||
|
@ -190,6 +191,15 @@ CURL *SystemFlags::initHTTP() {
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SystemFlags::globalCleanupHTTP() {
|
||||||
|
if(SystemFlags::curl_global_init_called == true) {
|
||||||
|
SystemFlags::curl_global_init_called = false;
|
||||||
|
//printf("HTTP cleanup\n");
|
||||||
|
curl_global_cleanup();
|
||||||
|
//printf("In [%s::%s Line %d] curl_global_cleanup called\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
SystemFlags::SystemFlagsType & SystemFlags::getSystemSettingType(DebugType type) {
|
SystemFlags::SystemFlagsType & SystemFlags::getSystemSettingType(DebugType type) {
|
||||||
if(SystemFlags::debugLogFileList == NULL) {
|
if(SystemFlags::debugLogFileList == NULL) {
|
||||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
@ -271,14 +281,6 @@ SystemFlags::SystemFlags() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SystemFlags::globalCleanupHTTP() {
|
|
||||||
if(SystemFlags::curl_global_init_called == true) {
|
|
||||||
SystemFlags::curl_global_init_called = false;
|
|
||||||
curl_global_cleanup();
|
|
||||||
//printf("In [%s::%s Line %d] curl_global_cleanup called\n",__FILE__,__FUNCTION__,__LINE__);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemFlags::cleanupHTTP(CURL **handle, bool globalCleanup) {
|
void SystemFlags::cleanupHTTP(CURL **handle, bool globalCleanup) {
|
||||||
if(handle != NULL && *handle != NULL) {
|
if(handle != NULL && *handle != NULL) {
|
||||||
curl_easy_cleanup(*handle);
|
curl_easy_cleanup(*handle);
|
||||||
|
@ -375,8 +377,6 @@ void SystemFlags::Close() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SystemFlags::globalCleanupHTTP();
|
|
||||||
|
|
||||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -64,6 +64,7 @@ bool XmlIo::initialized= false;
|
||||||
|
|
||||||
XmlIo::XmlIo() {
|
XmlIo::XmlIo() {
|
||||||
try{
|
try{
|
||||||
|
//printf("XmlIo init\n");
|
||||||
XMLPlatformUtils::Initialize();
|
XMLPlatformUtils::Initialize();
|
||||||
|
|
||||||
XmlIo::initialized= true;
|
XmlIo::initialized= true;
|
||||||
|
@ -93,6 +94,7 @@ XmlIo &XmlIo::getInstance() {
|
||||||
void XmlIo::cleanup() {
|
void XmlIo::cleanup() {
|
||||||
if(XmlIo::initialized == true) {
|
if(XmlIo::initialized == true) {
|
||||||
XmlIo::initialized= false;
|
XmlIo::initialized= false;
|
||||||
|
//printf("XmlIo cleanup\n");
|
||||||
XMLPlatformUtils::Terminate();
|
XMLPlatformUtils::Terminate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user