MM-18540 - Demo plugin crashes on server shutdown (#12371)
* MM-18540 - Demo plugin crashes on server shutdown * MM-18540 - Removed unncessary lock statements * Added comments, logging a warning if PluginsEnv is updated while shutting down plugins * Don't clean up PluginsEnv if another Env is detected * Changing warn to debug * Revert "Changing warn to debug" This reverts commit 46f20ab21eeabb01d07f53e02d850cd6d9b2b837.
Этот коммит содержится в:
@@ -43,6 +43,7 @@ func (a *App) SetPluginsEnvironment(pluginsEnvironment *plugin.Environment) {
|
||||
}
|
||||
|
||||
func (a *App) SyncPluginsActiveState() {
|
||||
// Acquiring lock manually, as plugins might be disabled. See GetPluginsEnvironment.
|
||||
a.Srv.PluginsLock.RLock()
|
||||
pluginsEnvironment := a.Srv.PluginsEnvironment
|
||||
a.Srv.PluginsLock.RUnlock()
|
||||
@@ -124,6 +125,7 @@ func (a *App) NewPluginAPI(manifest *model.Manifest) plugin.API {
|
||||
}
|
||||
|
||||
func (a *App) InitPlugins(pluginDir, webappPluginDir string) {
|
||||
// Acquiring lock manually, as plugins might be disabled. See GetPluginsEnvironment.
|
||||
a.Srv.PluginsLock.RLock()
|
||||
pluginsEnvironment := a.Srv.PluginsEnvironment
|
||||
a.Srv.PluginsLock.RUnlock()
|
||||
@@ -257,9 +259,7 @@ func (a *App) SyncPlugins() *model.AppError {
|
||||
}
|
||||
|
||||
func (a *App) ShutDownPlugins() {
|
||||
a.Srv.PluginsLock.Lock()
|
||||
pluginsEnvironment := a.Srv.PluginsEnvironment
|
||||
defer a.Srv.PluginsLock.Unlock()
|
||||
pluginsEnvironment := a.GetPluginsEnvironment()
|
||||
if pluginsEnvironment == nil {
|
||||
return
|
||||
}
|
||||
@@ -270,7 +270,15 @@ func (a *App) ShutDownPlugins() {
|
||||
|
||||
a.RemoveConfigListener(a.Srv.PluginConfigListenerId)
|
||||
a.Srv.PluginConfigListenerId = ""
|
||||
a.Srv.PluginsEnvironment = nil
|
||||
|
||||
// Acquiring lock manually before cleaning up PluginsEnvironment.
|
||||
a.Srv.PluginsLock.Lock()
|
||||
defer a.Srv.PluginsLock.Unlock()
|
||||
if a.Srv.PluginsEnvironment == pluginsEnvironment {
|
||||
a.Srv.PluginsEnvironment = nil
|
||||
} else {
|
||||
mlog.Warn("Another PluginsEnvironment detected while shutting down plugins.")
|
||||
}
|
||||
}
|
||||
|
||||
func (a *App) GetActivePluginManifests() ([]*model.Manifest, *model.AppError) {
|
||||
|
||||
Ссылка в новой задаче
Block a user