]> git.vomp.tv Git - vompclient-marten.git/commitdiff
Fix removeAll in BoxStack
authorChris Tallon <chris@vomp.tv>
Mon, 2 Jun 2008 22:14:59 +0000 (22:14 +0000)
committerChris Tallon <chris@vomp.tv>
Mon, 2 Jun 2008 22:14:59 +0000 (22:14 +0000)
boxstack.cc

index 896b42c8a15fe93a0e6070cbac781d75417d21ae..0778ddb2ff13304c0bf602c4fd2bf16fdd04eebe 100644 (file)
@@ -425,24 +425,59 @@ void BoxStack::removeAll()
   // 1.. Don't delete wallpaper. No point.
 
   // Need locking on this one??
+  
+  // This is pretty silly now that preDelete needs mutex unlocked
+  
+  Boxx* toDel = NULL;
+  
+  while(numBoxes > 1)
+  {
+    #ifndef WIN32
+      pthread_mutex_lock(&boxLock);
+    #else
+      WaitForSingleObject(boxLock, INFINITE);
+    #endif  
 
-#ifndef WIN32
-  pthread_mutex_lock(&boxLock);
-#else
-  WaitForSingleObject(boxLock, INFINITE);
-#endif
+    if (numBoxes == 1)
+    {
+      #ifndef WIN32
+        pthread_mutex_unlock(&boxLock);
+      #else
+        ReleaseMutex(boxLock);
+      #endif
+      break;
+    }    
+  
+    toDel = boxes[numBoxes - 1];
+
+    #ifndef WIN32
+      pthread_mutex_unlock(&boxLock);
+    #else
+      ReleaseMutex(boxLock);
+    #endif
+
+    toDel->preDelete();
+    
+    #ifndef WIN32
+      pthread_mutex_lock(&boxLock);
+    #else
+      WaitForSingleObject(boxLock, INFINITE);
+    #endif  
+
+    // If boxes[numBoxes - 1] isn't toDel then there's a problem
+    if (boxes[numBoxes - 1] == toDel)
+    {
+      delete toDel;
+      --numBoxes;
+    }
 
+    #ifndef WIN32
+      pthread_mutex_unlock(&boxLock);
+    #else
+      ReleaseMutex(boxLock);
+    #endif
 
-  for (; numBoxes > 1; --numBoxes)
-  {
-    delete boxes[numBoxes-1];
   }
-  
-#ifndef WIN32
-  pthread_mutex_unlock(&boxLock);
-#else
-  ReleaseMutex(boxLock);
-#endif
 
 }