fix: plugins: use deferred lock to catch all branches

This commit is contained in:
Markus Linnala 2019-10-09 19:32:14 +03:00 committed by Frank Denis
parent 5bf5fe6c1d
commit acb4bbd002
1 changed files with 3 additions and 6 deletions

View File

@ -240,9 +240,9 @@ func (pluginsState *PluginsState) ApplyQueryPlugins(pluginsGlobals *PluginsGloba
} }
pluginsState.questionMsg = &msg pluginsState.questionMsg = &msg
pluginsGlobals.RLock() pluginsGlobals.RLock()
defer pluginsGlobals.RUnlock()
for _, plugin := range *pluginsGlobals.queryPlugins { for _, plugin := range *pluginsGlobals.queryPlugins {
if ret := plugin.Eval(pluginsState, &msg); ret != nil { if ret := plugin.Eval(pluginsState, &msg); ret != nil {
pluginsGlobals.RUnlock()
pluginsState.action = PluginsActionDrop pluginsState.action = PluginsActionDrop
return packet, ret return packet, ret
} }
@ -257,7 +257,6 @@ func (pluginsState *PluginsState) ApplyQueryPlugins(pluginsGlobals *PluginsGloba
break break
} }
} }
pluginsGlobals.RUnlock()
packet2, err := msg.PackBuffer(packet) packet2, err := msg.PackBuffer(packet)
if err != nil { if err != nil {
return packet, err return packet, err
@ -288,9 +287,9 @@ func (pluginsState *PluginsState) ApplyResponsePlugins(pluginsGlobals *PluginsGl
pluginsState.returnCode = PluginsReturnCodeResponseError pluginsState.returnCode = PluginsReturnCodeResponseError
} }
pluginsGlobals.RLock() pluginsGlobals.RLock()
defer pluginsGlobals.RUnlock()
for _, plugin := range *pluginsGlobals.responsePlugins { for _, plugin := range *pluginsGlobals.responsePlugins {
if ret := plugin.Eval(pluginsState, &msg); ret != nil { if ret := plugin.Eval(pluginsState, &msg); ret != nil {
pluginsGlobals.RUnlock()
pluginsState.action = PluginsActionDrop pluginsState.action = PluginsActionDrop
return packet, ret return packet, ret
} }
@ -306,7 +305,6 @@ func (pluginsState *PluginsState) ApplyResponsePlugins(pluginsGlobals *PluginsGl
break break
} }
} }
pluginsGlobals.RUnlock()
if ttl != nil { if ttl != nil {
setMaxTTL(&msg, *ttl) setMaxTTL(&msg, *ttl)
} }
@ -327,12 +325,11 @@ func (pluginsState *PluginsState) ApplyLoggingPlugins(pluginsGlobals *PluginsGlo
return errors.New("Unexpected number of questions") return errors.New("Unexpected number of questions")
} }
pluginsGlobals.RLock() pluginsGlobals.RLock()
defer pluginsGlobals.RUnlock()
for _, plugin := range *pluginsGlobals.loggingPlugins { for _, plugin := range *pluginsGlobals.loggingPlugins {
if ret := plugin.Eval(pluginsState, questionMsg); ret != nil { if ret := plugin.Eval(pluginsState, questionMsg); ret != nil {
pluginsGlobals.RUnlock()
return ret return ret
} }
} }
pluginsGlobals.RUnlock()
return nil return nil
} }