[regression r3729] Plugin classes not destructed properly on unload
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Compiz |
Fix Released
|
Critical
|
Sam Spilsbury | ||
compiz (Ubuntu) |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
When a plugin is unloaded, the screen and window classes of that plugin aren't properly destructed. This is a regression caused by r3729.
Here's what I've figured out so far:
1) Plugin list changes, CompPlugin::pop is called for plugins
2) CompPlugin::pop calls CompManager:
3) CompManager:
4) markNoFurtherIn
5) disallowInstant
6) CompManager:
7) CompPlugin:
8) PluginClassHand
9) CompPlugin:
I'm not sure what happens after (9), but the destructors of PluginClasses are never called.
A crash due to this bug occurs with following steps:
1) Enable Opacify plugin
2) Activate it if not automatically activated
3) Disable Opacify plugin
4) Crash.
Related branches
- PS Jenkins bot (community): Approve (continuous-integration)
- Sami Jaktholm (community): Approve
- MC Return: Approve
-
Diff: 20 lines (+1/-2)1 file modifiedsrc/plugin.cpp (+1/-2)
Changed in compiz: | |
milestone: | none → 0.9.10.0 |
Changed in compiz: | |
importance: | Undecided → High |
Changed in compiz: | |
assignee: | nobody → Sam Spilsbury (smspillaz) |
importance: | High → Critical |
Changed in compiz: | |
status: | Fix Committed → Fix Released |
A possible fix is to call markNoFurtherIn stantiation after finiScreen has completed. However, I'm not sure if is's a good idea to let the destructors (possibly) create new instances of PluginClasses we're trying to destroy.