mirror of
https://github.com/glest/glest-source.git
synced 2025-08-11 10:54:01 +02:00
- thread synch bugfix in Internet Lobby Menu (thanks tomreyn for the stack trace)
This commit is contained in:
@@ -340,6 +340,9 @@ MenuStateMasterserver::MenuStateMasterserver(Program *program, MainMenu *mainMen
|
|||||||
|
|
||||||
GraphicComponent::applyAllCustomProperties(containerName);
|
GraphicComponent::applyAllCustomProperties(containerName);
|
||||||
|
|
||||||
|
|
||||||
|
MutexSafeWrapper safeMutexPtr(&masterServerThreadPtrChangeAccessor);
|
||||||
|
masterServerThreadInDeletion = false;
|
||||||
needUpdateFromServer = true;
|
needUpdateFromServer = true;
|
||||||
updateFromMasterserverThread = new SimpleTaskThread(this,0,100);
|
updateFromMasterserverThread = new SimpleTaskThread(this,0,100);
|
||||||
updateFromMasterserverThread->setUniqueID(__FILE__);
|
updateFromMasterserverThread->setUniqueID(__FILE__);
|
||||||
@@ -351,16 +354,25 @@ MenuStateMasterserver::MenuStateMasterserver(Program *program, MainMenu *mainMen
|
|||||||
MenuStateMasterserver::~MenuStateMasterserver() {
|
MenuStateMasterserver::~MenuStateMasterserver() {
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
if(updateFromMasterserverThread != NULL) {
|
if(masterServerThreadInDeletion == false) {
|
||||||
MutexSafeWrapper safeMutex(&masterServerThreadAccessor);
|
MutexSafeWrapper safeMutexPtr(&masterServerThreadPtrChangeAccessor);
|
||||||
needUpdateFromServer = false;
|
if(updateFromMasterserverThread != NULL) {
|
||||||
safeMutex.ReleaseLock();
|
MutexSafeWrapper safeMutex(&masterServerThreadAccessor);
|
||||||
|
needUpdateFromServer = false;
|
||||||
|
safeMutex.ReleaseLock();
|
||||||
|
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
//BaseThread::shutdownAndWait(updateFromMasterserverThread);
|
//BaseThread::shutdownAndWait(updateFromMasterserverThread);
|
||||||
delete updateFromMasterserverThread;
|
masterServerThreadInDeletion = true;
|
||||||
updateFromMasterserverThread = NULL;
|
delete updateFromMasterserverThread;
|
||||||
|
updateFromMasterserverThread = NULL;
|
||||||
|
masterServerThreadInDeletion = false;
|
||||||
|
safeMutexPtr.ReleaseLock();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
safeMutexPtr.ReleaseLock();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
@@ -411,8 +423,12 @@ void MenuStateMasterserver::mouseClick(int x, int y, MouseButton mouseButton){
|
|||||||
soundRenderer.playFx(coreData.getClickSoundB());
|
soundRenderer.playFx(coreData.getClickSoundB());
|
||||||
|
|
||||||
//BaseThread::shutdownAndWait(updateFromMasterserverThread);
|
//BaseThread::shutdownAndWait(updateFromMasterserverThread);
|
||||||
|
MutexSafeWrapper safeMutexPtr(&masterServerThreadPtrChangeAccessor);
|
||||||
|
masterServerThreadInDeletion = true;
|
||||||
delete updateFromMasterserverThread;
|
delete updateFromMasterserverThread;
|
||||||
updateFromMasterserverThread = NULL;
|
updateFromMasterserverThread = NULL;
|
||||||
|
masterServerThreadInDeletion = false;
|
||||||
|
safeMutexPtr.ReleaseLock();
|
||||||
|
|
||||||
safeMutex.ReleaseLock();
|
safeMutex.ReleaseLock();
|
||||||
|
|
||||||
@@ -433,8 +449,12 @@ void MenuStateMasterserver::mouseClick(int x, int y, MouseButton mouseButton){
|
|||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
//BaseThread::shutdownAndWait(updateFromMasterserverThread);
|
//BaseThread::shutdownAndWait(updateFromMasterserverThread);
|
||||||
|
MutexSafeWrapper safeMutexPtr(&masterServerThreadPtrChangeAccessor);
|
||||||
|
masterServerThreadInDeletion = true;
|
||||||
delete updateFromMasterserverThread;
|
delete updateFromMasterserverThread;
|
||||||
updateFromMasterserverThread = NULL;
|
updateFromMasterserverThread = NULL;
|
||||||
|
masterServerThreadInDeletion = false;
|
||||||
|
safeMutexPtr.ReleaseLock();
|
||||||
|
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
@@ -459,9 +479,13 @@ void MenuStateMasterserver::mouseClick(int x, int y, MouseButton mouseButton){
|
|||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
safeMutex.ReleaseLock();
|
safeMutex.ReleaseLock();
|
||||||
|
|
||||||
|
MutexSafeWrapper safeMutexPtr(&masterServerThreadPtrChangeAccessor);
|
||||||
|
masterServerThreadInDeletion = true;
|
||||||
BaseThread::shutdownAndWait(updateFromMasterserverThread);
|
BaseThread::shutdownAndWait(updateFromMasterserverThread);
|
||||||
delete updateFromMasterserverThread;
|
delete updateFromMasterserverThread;
|
||||||
updateFromMasterserverThread = NULL;
|
updateFromMasterserverThread = NULL;
|
||||||
|
masterServerThreadInDeletion = false;
|
||||||
|
safeMutexPtr.ReleaseLock();
|
||||||
|
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
mainMenu->setState(new MenuStateConnectedGame(program, mainMenu,jmMasterserver));
|
mainMenu->setState(new MenuStateConnectedGame(program, mainMenu,jmMasterserver));
|
||||||
@@ -589,11 +613,18 @@ void MenuStateMasterserver::simpleTask() {
|
|||||||
void MenuStateMasterserver::updateServerInfo() {
|
void MenuStateMasterserver::updateServerInfo() {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
if( updateFromMasterserverThread == NULL ||
|
if(masterServerThreadInDeletion == true) {
|
||||||
updateFromMasterserverThread->getQuitStatus() == true) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MutexSafeWrapper safeMutexPtr(&masterServerThreadPtrChangeAccessor);
|
||||||
|
if( updateFromMasterserverThread == NULL ||
|
||||||
|
updateFromMasterserverThread->getQuitStatus() == true) {
|
||||||
|
safeMutexPtr.ReleaseLock();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
safeMutexPtr.ReleaseLock(true);
|
||||||
|
|
||||||
MutexSafeWrapper safeMutex(&masterServerThreadAccessor);
|
MutexSafeWrapper safeMutex(&masterServerThreadAccessor);
|
||||||
needUpdateFromServer = false;
|
needUpdateFromServer = false;
|
||||||
int numberOfOldServerLines=serverLines.size();
|
int numberOfOldServerLines=serverLines.size();
|
||||||
@@ -668,10 +699,14 @@ void MenuStateMasterserver::updateServerInfo() {
|
|||||||
sprintf(szBuf,"%s",masterServerInfo->getServerTitle().c_str());
|
sprintf(szBuf,"%s",masterServerInfo->getServerTitle().c_str());
|
||||||
masterServerInfo->setServerTitle(szBuf);
|
masterServerInfo->setServerTitle(szBuf);
|
||||||
|
|
||||||
if( updateFromMasterserverThread == NULL ||
|
safeMutexPtr.Lock();
|
||||||
|
if( masterServerThreadInDeletion == true ||
|
||||||
|
updateFromMasterserverThread == NULL ||
|
||||||
updateFromMasterserverThread->getQuitStatus() == true) {
|
updateFromMasterserverThread->getQuitStatus() == true) {
|
||||||
|
safeMutexPtr.ReleaseLock();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
safeMutexPtr.ReleaseLock(true);
|
||||||
|
|
||||||
safeMutex.Lock();
|
safeMutex.Lock();
|
||||||
serverLines.push_back(new ServerLine( masterServerInfo, i, containerName));
|
serverLines.push_back(new ServerLine( masterServerInfo, i, containerName));
|
||||||
@@ -685,16 +720,19 @@ void MenuStateMasterserver::updateServerInfo() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
safeMutexPtr.Lock();
|
||||||
if( updateFromMasterserverThread == NULL ||
|
if( updateFromMasterserverThread == NULL ||
|
||||||
updateFromMasterserverThread->getQuitStatus() == true) {
|
updateFromMasterserverThread->getQuitStatus() == true) {
|
||||||
|
safeMutexPtr.ReleaseLock();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
safeMutexPtr.ReleaseLock();
|
||||||
|
|
||||||
safeMutex.Lock();
|
safeMutex.Lock();
|
||||||
if(serverLines.size()>numberOfOldServerLines) {
|
if(serverLines.size()>numberOfOldServerLines) {
|
||||||
playServerFoundSound=true;
|
playServerFoundSound=true;
|
||||||
}
|
}
|
||||||
safeMutex.ReleaseLock(true);
|
safeMutex.ReleaseLock();
|
||||||
}
|
}
|
||||||
catch(const exception &e){
|
catch(const exception &e){
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugError,"In [%s::%s Line: %d] Error [%s]\n",__FILE__,__FUNCTION__,__LINE__,e.what());
|
SystemFlags::OutputDebug(SystemFlags::debugError,"In [%s::%s Line: %d] Error [%s]\n",__FILE__,__FUNCTION__,__LINE__,e.what());
|
||||||
|
@@ -65,8 +65,6 @@ public:
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ===============================
|
// ===============================
|
||||||
// class MenuStateMasterserver
|
// class MenuStateMasterserver
|
||||||
// ===============================
|
// ===============================
|
||||||
@@ -108,8 +106,6 @@ private:
|
|||||||
GraphicLabel externalConnectPort;
|
GraphicLabel externalConnectPort;
|
||||||
|
|
||||||
GraphicLabel selectButton;
|
GraphicLabel selectButton;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
GraphicMessageBox mainMessageBox;
|
GraphicMessageBox mainMessageBox;
|
||||||
int mainMessageBoxState;
|
int mainMessageBoxState;
|
||||||
@@ -126,6 +122,8 @@ private:
|
|||||||
static DisplayMessageFunction pCB_DisplayMessage;
|
static DisplayMessageFunction pCB_DisplayMessage;
|
||||||
std::string threadedErrorMsg;
|
std::string threadedErrorMsg;
|
||||||
Mutex masterServerThreadAccessor;
|
Mutex masterServerThreadAccessor;
|
||||||
|
Mutex masterServerThreadPtrChangeAccessor;
|
||||||
|
bool masterServerThreadInDeletion;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MenuStateMasterserver(Program *program, MainMenu *mainMenu);
|
MenuStateMasterserver(Program *program, MainMenu *mainMenu);
|
||||||
|
@@ -30,7 +30,7 @@ public:
|
|||||||
TextureGl();
|
TextureGl();
|
||||||
GLuint getHandle() const {return handle;}
|
GLuint getHandle() const {return handle;}
|
||||||
|
|
||||||
void OutputTextureDebugInfo(Texture::Format format, int components, const string path,uint64 rawSize);
|
void OutputTextureDebugInfo(Texture::Format format, int components, const string path,uint64 rawSize,GLenum texType);
|
||||||
};
|
};
|
||||||
|
|
||||||
// =====================================================
|
// =====================================================
|
||||||
|
@@ -337,7 +337,10 @@ GLint toCompressionFormatGl(GLint format) {
|
|||||||
|
|
||||||
case GL_ALPHA:
|
case GL_ALPHA:
|
||||||
case GL_ALPHA8:
|
case GL_ALPHA8:
|
||||||
|
//return GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
|
||||||
|
//return GL_COMPRESSED_ALPHA_ARB;
|
||||||
return GL_COMPRESSED_ALPHA;
|
return GL_COMPRESSED_ALPHA;
|
||||||
|
//return GL_COMPRESSED_RGBA;
|
||||||
default:
|
default:
|
||||||
return format;
|
return format;
|
||||||
}
|
}
|
||||||
@@ -494,7 +497,7 @@ void Texture1DGl::init(Filter filter, int maxAnisotropy) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
inited= true;
|
inited= true;
|
||||||
OutputTextureDebugInfo(format, pixmap.getComponents(),getPath(),pixmap.getPixelByteCount());
|
OutputTextureDebugInfo(format, pixmap.getComponents(),getPath(),pixmap.getPixelByteCount(),GL_TEXTURE_1D);
|
||||||
}
|
}
|
||||||
|
|
||||||
assertGl();
|
assertGl();
|
||||||
@@ -591,7 +594,7 @@ void Texture2DGl::init(Filter filter, int maxAnisotropy) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
inited= true;
|
inited= true;
|
||||||
OutputTextureDebugInfo(format, pixmap.getComponents(),getPath(),pixmap.getPixelByteCount());
|
OutputTextureDebugInfo(format, pixmap.getComponents(),getPath(),pixmap.getPixelByteCount(),GL_TEXTURE_2D);
|
||||||
}
|
}
|
||||||
|
|
||||||
assertGl();
|
assertGl();
|
||||||
@@ -667,7 +670,7 @@ void Texture3DGl::init(Filter filter, int maxAnisotropy) {
|
|||||||
}
|
}
|
||||||
inited= true;
|
inited= true;
|
||||||
|
|
||||||
OutputTextureDebugInfo(format, pixmap.getComponents(),getPath(),pixmap.getPixelByteCount());
|
OutputTextureDebugInfo(format, pixmap.getComponents(),getPath(),pixmap.getPixelByteCount(),GL_TEXTURE_3D);
|
||||||
}
|
}
|
||||||
|
|
||||||
assertGl();
|
assertGl();
|
||||||
@@ -763,7 +766,7 @@ void TextureCubeGl::init(Filter filter, int maxAnisotropy) {
|
|||||||
throw runtime_error(szBuf);
|
throw runtime_error(szBuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
OutputTextureDebugInfo(format, currentPixmap->getComponents(),getPath(),currentPixmap->getPixelByteCount());
|
OutputTextureDebugInfo(format, currentPixmap->getComponents(),getPath(),currentPixmap->getPixelByteCount(),target);
|
||||||
}
|
}
|
||||||
inited= true;
|
inited= true;
|
||||||
|
|
||||||
@@ -785,21 +788,21 @@ void TextureCubeGl::end(bool deletePixelBuffer) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextureGl::OutputTextureDebugInfo(Texture::Format format, int components,const string path,uint64 rawSize) {
|
void TextureGl::OutputTextureDebugInfo(Texture::Format format, int components,const string path,uint64 rawSize,GLenum texType) {
|
||||||
if(Texture::useTextureCompression == true) {
|
if(Texture::useTextureCompression == true) {
|
||||||
GLint glFormat= toFormatGl(format, components);
|
GLint glFormat= toFormatGl(format, components);
|
||||||
|
|
||||||
printf("**** Texture filename: [%s] format = %d components = %d, glFormat = %d, rawSize = %llu\n",path.c_str(),format,components,glFormat,(long long unsigned int)rawSize);
|
printf("**** Texture filename: [%s] format = %d components = %d, glFormat = %d, rawSize = %llu\n",path.c_str(),format,components,glFormat,(long long unsigned int)rawSize);
|
||||||
|
|
||||||
GLint compressed=0;
|
GLint compressed=0;
|
||||||
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPRESSED, &compressed);
|
glGetTexLevelParameteriv(texType, 0, GL_TEXTURE_COMPRESSED, &compressed);
|
||||||
int error = glGetError();
|
int error = glGetError();
|
||||||
|
|
||||||
printf("**** Texture compressed status: %d, error [%d]\n",compressed,error);
|
printf("**** Texture compressed status: %d, error [%d]\n",compressed,error);
|
||||||
|
|
||||||
bool isCompressed = (compressed == 1);
|
bool isCompressed = (compressed == 1);
|
||||||
compressed=0;
|
compressed=0;
|
||||||
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPRESSED_IMAGE_SIZE, &compressed);
|
glGetTexLevelParameteriv(texType, 0, GL_TEXTURE_COMPRESSED_IMAGE_SIZE, &compressed);
|
||||||
error = glGetError();
|
error = glGetError();
|
||||||
|
|
||||||
double percent = 0;
|
double percent = 0;
|
||||||
@@ -810,7 +813,7 @@ void TextureGl::OutputTextureDebugInfo(Texture::Format format, int components,co
|
|||||||
printf("**** Texture image size in video RAM: %d [%.2f%%], error [%d]\n",compressed,percent,error);
|
printf("**** Texture image size in video RAM: %d [%.2f%%], error [%d]\n",compressed,percent,error);
|
||||||
|
|
||||||
compressed=0;
|
compressed=0;
|
||||||
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &compressed);
|
glGetTexLevelParameteriv(texType, 0, GL_TEXTURE_INTERNAL_FORMAT, &compressed);
|
||||||
error = glGetError();
|
error = glGetError();
|
||||||
printf("**** Texture image compression format used: %d, error [%d]\n",compressed,error);
|
printf("**** Texture image compression format used: %d, error [%d]\n",compressed,error);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user