From 9671b2f99cf42fcd1d610385836ffc79502d717a Mon Sep 17 00:00:00 2001
From: Tomas Janousek <tomi@nomi.cz>
Date: Mon, 4 Feb 2008 17:53:32 +0100
Subject: Fix crash with apps reloading.

Yeah, we shouldn't delete pointers that are mentioned elsewhere...

Signed-off-by: Tomas Janousek <tomi@nomi.cz>
---
 src/Remember.cc | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/Remember.cc b/src/Remember.cc
index 8a5b29e..8e133b8 100644
--- a/src/Remember.cc
+++ b/src/Remember.cc
@@ -593,6 +593,7 @@ void Remember::reconfigure() {
 
     // we merge the old patterns with new ones
     Patterns *old_pats = m_pats.release();
+    set<Application *> reused_apps;
     m_pats.reset(new Patterns());
     m_startups.clear();
 
@@ -621,9 +622,10 @@ void Remember::reconfigure() {
                     if (!in_group) {
                         if ((err = pat->error()) == 0) {
                             Application *app = findMatchingPatterns(pat, old_pats, false);
-                            if (app)
+                            if (app) {
                                 app->reset();
-                            else
+                                reused_apps.insert(app);
+                            } else
                                 app = new Application(false);
 
                             m_pats->push_back(make_pair(pat, app));
@@ -659,6 +661,8 @@ void Remember::reconfigure() {
 
                     if (!app)
                         app = new Application(in_group, pat);
+                    else
+                        reused_apps.insert(app);
 
                     while (!grouped_pats.empty()) {
                         // associate all the patterns with this app
@@ -695,7 +699,8 @@ void Remember::reconfigure() {
     while (!old_pats->empty()) {
         it = old_pats->begin();
         delete it->first; // ClientPattern
-        old_apps.insert(it->second); // Application, not necessarily unique
+        if (reused_apps.find(it->second) == reused_apps.end())
+            old_apps.insert(it->second); // Application, not necessarily unique
         old_pats->erase(it);
     }
 
-- 
cgit v0.11.2