# Unloading search plugins crashes on Akonadi shutdown **Severity:** High **Area:** Server / SearchManager ## Description `SearchManager` contains a FIXME noting that unloading search plugins "messes up some global statics from client libs" and causes a crash on shutdown. As a workaround, plugins are kept loaded. ## Evidence /mnt/data/akonadi_extracted/akonadi/src/server/search/searchmanager.cpp lines 93–101: ``` 93| qDeleteAll(mPlugins); 94| /* 95| * FIXME: Unloading plugin messes up some global statics from client libs 96| * and causes crash on Akonadi shutdown (below main). Keeping the plugins 97| * loaded is not really a big issue as this is only invoked on server shutdown 98| * anyway, so we are not leaking any memory. 99| Q_FOREACH (QPluginLoader *loader, mPluginLoaders) { 100| loader->unload(); 101| delete loader; ``` ## Steps to Reproduce 1. Run akonadiserver with search plugins loaded. 2. Initiate server shutdown that triggers `SearchManager` destructor. 3. Attempt to unload plugins (if workaround removed) or observe persistent plugin loaders not being released. ## Expected Behavior OS Details: Operating System: openSUSE Tumbleweed 20250923 KDE Plasma Version: 6.4.5 KDE Frameworks Version: 6.18.0 Qt Version: 6.9.2 Kernel Version: 6.16.8-1-default (64-bit) Graphics Platform: Wayland Processors: 12 × Intel® Core™ 7 150U Memory: 16 GiB of RAM (15.3 GiB usable) Graphics Processor: Intel® Graphics Manufacturer: Dell Inc. Product Name: Inspiron 16 5640 Plugins can be unloaded cleanly during shutdown without crashing; resources are released. ## Actual Behavior Unloading plugins leads to a crash due to global statics; code avoids unloading to prevent crash. ## Suggested Fix / Next Steps - Identify offending global statics in client libs that rely on plugin code during shutdown. - Defer plugin unloading until after dependent statics are torn down, or refactor to avoid cross-library global state. - Consider using `qAddPostRoutine`/`Q_COREAPP_STARTUP_FUNCTION` lifecycle hooks or managing plugin lifetimes via a dedicated singleton whose teardown ordering is explicit. - Add regression test that loads and unloads plugin within a minimal server lifecycle.
Please don't copy-paste the output of code "analysis" from ChatGPT or another AI. It isn't actionable. Submitting merge requests to change these things would be helpful, but bug reports pointing them out isn't.