Avoid crashes on plugin unload while loading.

This commit is contained in:
Martín Lucas Golini
2024-09-28 13:42:54 -03:00
parent 49e56f05a2
commit 5a7e7e5387
8 changed files with 9 additions and 3 deletions
@@ -106,6 +106,7 @@ AutoCompletePlugin::AutoCompletePlugin( PluginManager* pluginManager, bool sync
}
AutoCompletePlugin::~AutoCompletePlugin() {
waitUntilLoaded();
mShuttingDown = true;
mManager->unsubscribeMessages( this );
unsubscribeFileSystemListener();
@@ -45,6 +45,7 @@ FormatterPlugin::FormatterPlugin( PluginManager* pluginManager, bool sync ) :
}
FormatterPlugin::~FormatterPlugin() {
waitUntilLoaded();
mShuttingDown = true;
unsubscribeFileSystemListener();
@@ -83,6 +83,7 @@ GitPlugin::GitPlugin( PluginManager* pluginManager, bool sync ) :
}
GitPlugin::~GitPlugin() {
waitUntilLoaded();
mShuttingDown = true;
if ( mStatusButton )
mStatusButton->close();
@@ -48,6 +48,7 @@ LinterPlugin::LinterPlugin( PluginManager* pluginManager, bool sync ) : Plugin(
}
LinterPlugin::~LinterPlugin() {
waitUntilLoaded();
mShuttingDown = true;
mManager->unsubscribeMessages( this );
unsubscribeFileSystemListener();
@@ -248,6 +248,7 @@ LSPClientPlugin::LSPClientPlugin( PluginManager* pluginManager, bool sync ) :
}
LSPClientPlugin::~LSPClientPlugin() {
waitUntilLoaded();
mShuttingDown = true;
mManager->unsubscribeMessages( this );
unsubscribeFileSystemListener();
+1 -1
View File
@@ -71,7 +71,7 @@ void Plugin::showMessage( LSPMessageType type, const std::string& message,
&msgReq );
}
Plugin::~Plugin() {
void Plugin::waitUntilLoaded() {
while ( mLoading )
Sys::sleep( Milliseconds( 1 ) );
}
+2 -2
View File
@@ -17,8 +17,6 @@ class Plugin : public UICodeEditorPlugin {
public:
explicit Plugin( PluginManager* manager );
virtual ~Plugin();
void subscribeFileSystemListener();
void unsubscribeFileSystemListener();
@@ -63,6 +61,8 @@ class Plugin : public UICodeEditorPlugin {
std::atomic<bool> mShuttingDown{ false };
void setReady();
void waitUntilLoaded();
};
class PluginBase : public Plugin {
@@ -35,6 +35,7 @@ XMLToolsPlugin::XMLToolsPlugin( PluginManager* pluginManager, bool sync ) :
}
XMLToolsPlugin::~XMLToolsPlugin() {
waitUntilLoaded();
mShuttingDown = true;
{
Lock l( mClientsMutex );