diff options
author | Tomas Janousek <tomi@nomi.cz> | 2008-02-04 16:53:32 (GMT) |
---|---|---|
committer | Tomas Janousek <tomi@nomi.cz> | 2008-02-04 17:46:22 (GMT) |
commit | 9671b2f99cf42fcd1d610385836ffc79502d717a (patch) | |
tree | 4d0375c1f3a5fbd341f1303ed09c8d3f2db32c20 | |
parent | 38f84c393210066acb7386aab6e35e70e0994f72 (diff) | |
download | fluxbox_pavel-9671b2f99cf42fcd1d610385836ffc79502d717a.zip fluxbox_pavel-9671b2f99cf42fcd1d610385836ffc79502d717a.tar.bz2 |
Fix crash with apps reloading.
Yeah, we shouldn't delete pointers that are mentioned elsewhere...
Signed-off-by: Tomas Janousek <tomi@nomi.cz>
-rw-r--r-- | src/Remember.cc | 11 |
1 files 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() { | |||
593 | 593 | ||
594 | // we merge the old patterns with new ones | 594 | // we merge the old patterns with new ones |
595 | Patterns *old_pats = m_pats.release(); | 595 | Patterns *old_pats = m_pats.release(); |
596 | set<Application *> reused_apps; | ||
596 | m_pats.reset(new Patterns()); | 597 | m_pats.reset(new Patterns()); |
597 | m_startups.clear(); | 598 | m_startups.clear(); |
598 | 599 | ||
@@ -621,9 +622,10 @@ void Remember::reconfigure() { | |||
621 | if (!in_group) { | 622 | if (!in_group) { |
622 | if ((err = pat->error()) == 0) { | 623 | if ((err = pat->error()) == 0) { |
623 | Application *app = findMatchingPatterns(pat, old_pats, false); | 624 | Application *app = findMatchingPatterns(pat, old_pats, false); |
624 | if (app) | 625 | if (app) { |
625 | app->reset(); | 626 | app->reset(); |
626 | else | 627 | reused_apps.insert(app); |
628 | } else | ||
627 | app = new Application(false); | 629 | app = new Application(false); |
628 | 630 | ||
629 | m_pats->push_back(make_pair(pat, app)); | 631 | m_pats->push_back(make_pair(pat, app)); |
@@ -659,6 +661,8 @@ void Remember::reconfigure() { | |||
659 | 661 | ||
660 | if (!app) | 662 | if (!app) |
661 | app = new Application(in_group, pat); | 663 | app = new Application(in_group, pat); |
664 | else | ||
665 | reused_apps.insert(app); | ||
662 | 666 | ||
663 | while (!grouped_pats.empty()) { | 667 | while (!grouped_pats.empty()) { |
664 | // associate all the patterns with this app | 668 | // associate all the patterns with this app |
@@ -695,7 +699,8 @@ void Remember::reconfigure() { | |||
695 | while (!old_pats->empty()) { | 699 | while (!old_pats->empty()) { |
696 | it = old_pats->begin(); | 700 | it = old_pats->begin(); |
697 | delete it->first; // ClientPattern | 701 | delete it->first; // ClientPattern |
698 | old_apps.insert(it->second); // Application, not necessarily unique | 702 | if (reused_apps.find(it->second) == reused_apps.end()) |
703 | old_apps.insert(it->second); // Application, not necessarily unique | ||
699 | old_pats->erase(it); | 704 | old_pats->erase(it); |
700 | } | 705 | } |
701 | 706 | ||