mirror of
https://github.com/SpartanJ/eepp.git
synced 2026-10-19 03:53:57 +03:00
Avoid crashes on plugin unload while loading.
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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 ) );
|
||||
}
|
||||
|
||||
@@ -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 );
|
||||
|
||||
Reference in New Issue
Block a user