Browse Source

Seltenen absturtz in der Kartenauswahl behoben

Kolja Strohm 5 years ago
parent
commit
85f164e2ac
1 changed files with 11 additions and 0 deletions
  1. 11 0
      KSGClient/NachLogin/Spiele/Karte Auswahl/KarteAuswahl.cpp

+ 11 - 0
KSGClient/NachLogin/Spiele/Karte Auswahl/KarteAuswahl.cpp

@@ -106,6 +106,7 @@ void KarteDaten::Loader::thread()
                 kd->geladen = 2;
                 kd->geladen = 2;
                 if( kd->ausgewählt )
                 if( kd->ausgewählt )
                 {
                 {
+                    kd->beschreibung->lock();
                     kd->animation |= 0x4;
                     kd->animation |= 0x4;
                     kd->beschreibung->neuLaden();
                     kd->beschreibung->neuLaden();
                     KSGSGetVariable getKSGSVar = (KSGSGetVariable)GetProcAddress( kd->ksgs, KSGS_VARIABLE_FUNKTION );
                     KSGSGetVariable getKSGSVar = (KSGSGetVariable)GetProcAddress( kd->ksgs, KSGS_VARIABLE_FUNKTION );
@@ -117,6 +118,7 @@ void KarteDaten::Loader::thread()
                     KSGSVariable *var = kd->beschreibung->startFunktion( kd->beschreibung->getFunktionId( "_set_Erlaubt" ), params );
                     KSGSVariable *var = kd->beschreibung->startFunktion( kd->beschreibung->getFunktionId( "_set_Erlaubt" ), params );
                     if( var )
                     if( var )
                         var->release();
                         var->release();
+                    kd->beschreibung->unlock();
                 }
                 }
             }
             }
             kd->rend = 1;
             kd->rend = 1;
@@ -206,6 +208,8 @@ void KarteDaten::updateErlaubt()
     erlaubt = infoClient->istKarteErlaubt( karteId );
     erlaubt = infoClient->istKarteErlaubt( karteId );
     if( update != erlaubt && beschreibung && ksgs )
     if( update != erlaubt && beschreibung && ksgs )
     {
     {
+
+        beschreibung->lock();
         KSGSGetVariable getKSGSVar = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
         KSGSGetVariable getKSGSVar = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
         RCArray< KSGSVariable > *params = new RCArray< KSGSVariable >();
         RCArray< KSGSVariable > *params = new RCArray< KSGSVariable >();
         KSGSVariableDef p1;
         KSGSVariableDef p1;
@@ -215,6 +219,7 @@ void KarteDaten::updateErlaubt()
         KSGSVariable *var = beschreibung->startFunktion( beschreibung->getFunktionId( "_set_Erlaubt" ), params );
         KSGSVariable *var = beschreibung->startFunktion( beschreibung->getFunktionId( "_set_Erlaubt" ), params );
         if( var )
         if( var )
             var->release();
             var->release();
+        beschreibung->unlock();
     }
     }
 }
 }
 
 
@@ -306,6 +311,7 @@ void KarteDaten::setAuswahl( bool auswahl )
         animation |= 0x4;
         animation |= 0x4;
         if( beschreibung && ksgs )
         if( beschreibung && ksgs )
         {
         {
+            beschreibung->lock();
             beschreibung->neuLaden();
             beschreibung->neuLaden();
             KSGSGetVariable getKSGSVar = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
             KSGSGetVariable getKSGSVar = (KSGSGetVariable)GetProcAddress( ksgs, KSGS_VARIABLE_FUNKTION );
             RCArray< KSGSVariable > *params = new RCArray< KSGSVariable >();
             RCArray< KSGSVariable > *params = new RCArray< KSGSVariable >();
@@ -316,6 +322,7 @@ void KarteDaten::setAuswahl( bool auswahl )
             KSGSVariable *var = beschreibung->startFunktion( beschreibung->getFunktionId( "_set_Erlaubt" ), params );
             KSGSVariable *var = beschreibung->startFunktion( beschreibung->getFunktionId( "_set_Erlaubt" ), params );
             if( var )
             if( var )
                 var->release();
                 var->release();
+            beschreibung->unlock();
         }
         }
     }
     }
     else
     else
@@ -332,7 +339,11 @@ void KarteDaten::setPosition( int lPos )
 bool KarteDaten::tick( double tickVal )
 bool KarteDaten::tick( double tickVal )
 {
 {
     if( beschreibung )
     if( beschreibung )
+    {
+        beschreibung->lock();
         rend |= beschreibung->tick( tickVal );
         rend |= beschreibung->tick( tickVal );
+        beschreibung->unlock();
+    }
     this->tickVal += tickVal * 500;
     this->tickVal += tickVal * 500;
     int val = ( int ) this->tickVal;
     int val = ( int ) this->tickVal;
     if( val < 1 )
     if( val < 1 )