diff options
| author | virchau13 <virchau13@hexular.net> | 2024-04-28 00:38:48 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-27 17:38:48 +0100 |
| commit | 90a53aed59be6bac45c13eac954471d56ac23375 (patch) | |
| tree | c1a246f6cdf0b9f6d0f1f6ea6f282b4fa5666976 /src/plugins | |
| parent | 55490637aaf13c8400a0679fcf5b7fca417bc923 (diff) | |
CrashReporter: fix deadlocks by making it mostly async-signal-safe (#5771)
`CrashReporter::createAndSaveCrash()` is not async-signal-safe,
resulting in random deadlocks/double-crashes during Hyprland crashes.
This changes the function to be (mostly) async-signal-safe.
Diffstat (limited to 'src/plugins')
| -rw-r--r-- | src/plugins/PluginSystem.cpp | 10 | ||||
| -rw-r--r-- | src/plugins/PluginSystem.hpp | 2 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/plugins/PluginSystem.cpp b/src/plugins/PluginSystem.cpp index d813a32e..46f50469 100644 --- a/src/plugins/PluginSystem.cpp +++ b/src/plugins/PluginSystem.cpp @@ -194,3 +194,13 @@ std::vector<CPlugin*> CPluginSystem::getAllPlugins() { results[i] = m_vLoadedPlugins[i].get(); return results; } + +size_t CPluginSystem::pluginCount() { + return m_vLoadedPlugins.size(); +} + +void CPluginSystem::sig_getPlugins(CPlugin** data, size_t len) { + for (size_t i = 0; i < std::min(m_vLoadedPlugins.size(), len); i++) { + data[i] = m_vLoadedPlugins[i].get(); + } +} diff --git a/src/plugins/PluginSystem.hpp b/src/plugins/PluginSystem.hpp index 944434fa..a442c31c 100644 --- a/src/plugins/PluginSystem.hpp +++ b/src/plugins/PluginSystem.hpp @@ -37,6 +37,8 @@ class CPluginSystem { CPlugin* getPluginByPath(const std::string& path); CPlugin* getPluginByHandle(HANDLE handle); std::vector<CPlugin*> getAllPlugins(); + size_t pluginCount(); + void sig_getPlugins(CPlugin** data, size_t len); bool m_bAllowConfigVars = false; std::string m_szLastError = ""; |
