Fix data race.

master
Robert Gerus 2015-12-09 11:27:55 +01:00
parent 8fe326d3e4
commit 25a2a1b2c2
1 changed files with 6 additions and 0 deletions

View File

@ -7,15 +7,19 @@ package bot
import (
"log"
"strings"
"sync"
cfg "github.com/arachnist/gorepost/config"
"github.com/arachnist/gorepost/irc"
)
var callbacks = make(map[string]map[string]func(func(irc.Message), irc.Message))
var callbackLock sync.RWMutex
// addCallback registers callbacks that can be later dispatched by Dispatcher
func addCallback(command, name string, callback func(func(irc.Message), irc.Message)) {
callbackLock.Lock()
defer callbackLock.Unlock()
log.Println("adding callback", command, name)
if _, ok := callbacks[command]; !ok {
callbacks[command] = make(map[string]func(func(irc.Message), irc.Message))
@ -33,6 +37,8 @@ func Dispatcher(output func(irc.Message), input irc.Message) {
return
}
callbackLock.RLock()
defer callbackLock.RUnlock()
if callbacks[input.Command] != nil {
if len(cfg.LookupStringMap(input.Context, "WhitelistedPlugins")) > 0 {
for i, f := range callbacks[input.Command] {