summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/window.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/window.cpp b/src/window.cpp
index ff24dbd3b..18e8f3588 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -1079,7 +1079,16 @@ Window::~Window()
free(this->nested_array); // Contents is released through deletion of #nested_root.
delete this->nested_root;
- this->window_class = WC_INVALID;
+ /*
+ * Make fairly sure that this is written, and not "optimized" away.
+ * The delete operator is overwritten to not delete it; the deletion
+ * happens at a later moment in time after the window has been
+ * removed from the list of windows to prevent issues with items
+ * being removed during the iteration as not one but more windows
+ * may be removed by a single call to ~Window by means of the
+ * DeleteChildWindows function.
+ */
+ const_cast<volatile WindowClass &>(this->window_class) = WC_INVALID;
}
/**