// 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
}