- thread synch bugfix in Internet Lobby Menu (thanks tomreyn for the stack trace)
This commit is contained in:
parent
dfedf2259b
commit
d8c11ebe71
|
@ -340,6 +340,9 @@ MenuStateMasterserver::MenuStateMasterserver(Program *program, MainMenu *mainMen
|
|||
|
||||
GraphicComponent::applyAllCustomProperties(containerName);
|
||||
|
||||
|
||||
MutexSafeWrapper safeMutexPtr(&masterServerThreadPtrChangeAccessor);
|
||||
masterServerThreadInDeletion = false;
|
||||
needUpdateFromServer = true;
|
||||
updateFromMasterserverThread = new SimpleTaskThread(this,0,100);
|
||||
updateFromMasterserverThread->setUniqueID(__FILE__);
|
||||
|
@ -351,16 +354,25 @@ MenuStateMasterserver::MenuStateMasterserver(Program *program, MainMenu *mainMen
|
|||
MenuStateMasterserver::~MenuStateMasterserver() {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
if(updateFromMasterserverThread != NULL) {
|
||||
MutexSafeWrapper safeMutex(&masterServerThreadAccessor);
|
||||
needUpdateFromServer = false;
|
||||
safeMutex.ReleaseLock();
|
||||
if(masterServerThreadInDeletion == false) {
|
||||
MutexSafeWrapper safeMutexPtr(&masterServerThreadPtrChangeAccessor);
|
||||
if(updateFromMasterserverThread != NULL) {
|
||||
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);
|
||||
delete updateFromMasterserverThread;
|
||||
updateFromMasterserverThread = NULL;
|
||||
//BaseThread::shutdownAndWait(updateFromMasterserverThread);
|
||||
masterServerThreadInDeletion = true;
|
||||
delete updateFromMasterserverThread;
|
||||
updateFromMasterserverThread = NULL;
|
||||
masterServerThreadInDeletion = false;
|
||||
safeMutexPtr.ReleaseLock();
|
||||
}
|
||||
else {
|
||||
safeMutexPtr.ReleaseLock();
|
||||
}
|
||||
}
|
||||
|
||||
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());
|
||||
|
||||
//BaseThread::shutdownAndWait(updateFromMasterserverThread);
|
||||
MutexSafeWrapper safeMutexPtr(&masterServerThreadPtrChangeAccessor);
|
||||
masterServerThreadInDeletion = true;
|
||||
delete updateFromMasterserverThread;
|
||||
updateFromMasterserverThread = NULL;
|
||||
masterServerThreadInDeletion = false;
|
||||
safeMutexPtr.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__);
|
||||
|
||||
//BaseThread::shutdownAndWait(updateFromMasterserverThread);
|
||||
MutexSafeWrapper safeMutexPtr(&masterServerThreadPtrChangeAccessor);
|
||||
masterServerThreadInDeletion = true;
|
||||
delete updateFromMasterserverThread;
|
||||
updateFromMasterserverThread = NULL;
|
||||
masterServerThreadInDeletion = false;
|
||||
safeMutexPtr.ReleaseLock();
|
||||
|
||||
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__);
|
||||
safeMutex.ReleaseLock();
|
||||
|
||||
MutexSafeWrapper safeMutexPtr(&masterServerThreadPtrChangeAccessor);
|
||||
masterServerThreadInDeletion = true;
|
||||
BaseThread::shutdownAndWait(updateFromMasterserverThread);
|
||||
delete updateFromMasterserverThread;
|
||||
updateFromMasterserverThread = NULL;
|
||||
masterServerThreadInDeletion = false;
|
||||
safeMutexPtr.ReleaseLock();
|
||||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
mainMenu->setState(new MenuStateConnectedGame(program, mainMenu,jmMasterserver));
|
||||
|
@ -589,11 +613,18 @@ void MenuStateMasterserver::simpleTask() {
|
|||
void MenuStateMasterserver::updateServerInfo() {
|
||||
try {
|
||||
|
||||
if( updateFromMasterserverThread == NULL ||
|
||||
updateFromMasterserverThread->getQuitStatus() == true) {
|
||||
if(masterServerThreadInDeletion == true) {
|
||||
return;
|
||||
}
|
||||
|
||||
MutexSafeWrapper safeMutexPtr(&masterServerThreadPtrChangeAccessor);
|
||||
if( updateFromMasterserverThread == NULL ||
|
||||
updateFromMasterserverThread->getQuitStatus() == true) {
|
||||
safeMutexPtr.ReleaseLock();
|
||||
return;
|
||||
}
|
||||
safeMutexPtr.ReleaseLock(true);
|
||||
|
||||
MutexSafeWrapper safeMutex(&masterServerThreadAccessor);
|
||||
needUpdateFromServer = false;
|
||||
int numberOfOldServerLines=serverLines.size();
|
||||
|
@ -668,10 +699,14 @@ void MenuStateMasterserver::updateServerInfo() {
|
|||
sprintf(szBuf,"%s",masterServerInfo->getServerTitle().c_str());
|
||||
masterServerInfo->setServerTitle(szBuf);
|
||||
|
||||
if( updateFromMasterserverThread == NULL ||
|
||||
safeMutexPtr.Lock();
|
||||
if( masterServerThreadInDeletion == true ||
|
||||
updateFromMasterserverThread == NULL ||
|
||||
updateFromMasterserverThread->getQuitStatus() == true) {
|
||||
safeMutexPtr.ReleaseLock();
|
||||
return;
|
||||
}
|
||||
safeMutexPtr.ReleaseLock(true);
|
||||
|
||||
safeMutex.Lock();
|
||||
serverLines.push_back(new ServerLine( masterServerInfo, i, containerName));
|
||||
|
@ -685,16 +720,19 @@ void MenuStateMasterserver::updateServerInfo() {
|
|||
}
|
||||
}
|
||||
|
||||
safeMutexPtr.Lock();
|
||||
if( updateFromMasterserverThread == NULL ||
|
||||
updateFromMasterserverThread->getQuitStatus() == true) {
|
||||
safeMutexPtr.ReleaseLock();
|
||||
return;
|
||||
}
|
||||
safeMutexPtr.ReleaseLock();
|
||||
|
||||
safeMutex.Lock();
|
||||
if(serverLines.size()>numberOfOldServerLines) {
|
||||
playServerFoundSound=true;
|
||||
}
|
||||
safeMutex.ReleaseLock(true);
|
||||
safeMutex.ReleaseLock();
|
||||
}
|
||||
catch(const exception &e){
|
||||
SystemFlags::OutputDebug(SystemFlags::debugError,"In [%s::%s Line: %d] Error [%s]\n",__FILE__,__FUNCTION__,__LINE__,e.what());
|
||||
|
|
|
@ -65,8 +65,6 @@ public:
|
|||
|
||||
};
|
||||
|
||||
|
||||
|
||||
// ===============================
|
||||
// class MenuStateMasterserver
|
||||
// ===============================
|
||||
|
@ -108,8 +106,6 @@ private:
|
|||
GraphicLabel externalConnectPort;
|
||||
|
||||
GraphicLabel selectButton;
|
||||
|
||||
|
||||
|
||||
GraphicMessageBox mainMessageBox;
|
||||
int mainMessageBoxState;
|
||||
|
@ -126,6 +122,8 @@ private:
|
|||
static DisplayMessageFunction pCB_DisplayMessage;
|
||||
std::string threadedErrorMsg;
|
||||
Mutex masterServerThreadAccessor;
|
||||
Mutex masterServerThreadPtrChangeAccessor;
|
||||
bool masterServerThreadInDeletion;
|
||||
|
||||
public:
|
||||
MenuStateMasterserver(Program *program, MainMenu *mainMenu);
|
||||
|
|
|
@ -30,7 +30,7 @@ public:
|
|||
TextureGl();
|
||||
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_ALPHA8:
|
||||
//return GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
|
||||
//return GL_COMPRESSED_ALPHA_ARB;
|
||||
return GL_COMPRESSED_ALPHA;
|
||||
//return GL_COMPRESSED_RGBA;
|
||||
default:
|
||||
return format;
|
||||
}
|
||||
|
@ -494,7 +497,7 @@ void Texture1DGl::init(Filter filter, int maxAnisotropy) {
|
|||
}
|
||||
}
|
||||
inited= true;
|
||||
OutputTextureDebugInfo(format, pixmap.getComponents(),getPath(),pixmap.getPixelByteCount());
|
||||
OutputTextureDebugInfo(format, pixmap.getComponents(),getPath(),pixmap.getPixelByteCount(),GL_TEXTURE_1D);
|
||||
}
|
||||
|
||||
assertGl();
|
||||
|
@ -591,7 +594,7 @@ void Texture2DGl::init(Filter filter, int maxAnisotropy) {
|
|||
}
|
||||
}
|
||||
inited= true;
|
||||
OutputTextureDebugInfo(format, pixmap.getComponents(),getPath(),pixmap.getPixelByteCount());
|
||||
OutputTextureDebugInfo(format, pixmap.getComponents(),getPath(),pixmap.getPixelByteCount(),GL_TEXTURE_2D);
|
||||
}
|
||||
|
||||
assertGl();
|
||||
|
@ -667,7 +670,7 @@ void Texture3DGl::init(Filter filter, int maxAnisotropy) {
|
|||
}
|
||||
inited= true;
|
||||
|
||||
OutputTextureDebugInfo(format, pixmap.getComponents(),getPath(),pixmap.getPixelByteCount());
|
||||
OutputTextureDebugInfo(format, pixmap.getComponents(),getPath(),pixmap.getPixelByteCount(),GL_TEXTURE_3D);
|
||||
}
|
||||
|
||||
assertGl();
|
||||
|
@ -763,7 +766,7 @@ void TextureCubeGl::init(Filter filter, int maxAnisotropy) {
|
|||
throw runtime_error(szBuf);
|
||||
}
|
||||
|
||||
OutputTextureDebugInfo(format, currentPixmap->getComponents(),getPath(),currentPixmap->getPixelByteCount());
|
||||
OutputTextureDebugInfo(format, currentPixmap->getComponents(),getPath(),currentPixmap->getPixelByteCount(),target);
|
||||
}
|
||||
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) {
|
||||
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);
|
||||
|
||||
GLint compressed=0;
|
||||
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPRESSED, &compressed);
|
||||
glGetTexLevelParameteriv(texType, 0, GL_TEXTURE_COMPRESSED, &compressed);
|
||||
int error = glGetError();
|
||||
|
||||
printf("**** Texture compressed status: %d, error [%d]\n",compressed,error);
|
||||
|
||||
bool isCompressed = (compressed == 1);
|
||||
compressed=0;
|
||||
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPRESSED_IMAGE_SIZE, &compressed);
|
||||
glGetTexLevelParameteriv(texType, 0, GL_TEXTURE_COMPRESSED_IMAGE_SIZE, &compressed);
|
||||
error = glGetError();
|
||||
|
||||
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);
|
||||
|
||||
compressed=0;
|
||||
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &compressed);
|
||||
glGetTexLevelParameteriv(texType, 0, GL_TEXTURE_INTERNAL_FORMAT, &compressed);
|
||||
error = glGetError();
|
||||
printf("**** Texture image compression format used: %d, error [%d]\n",compressed,error);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user