Clean up mutexes around s.handlers so they exist only in discord.go
This commit is contained in:
parent
4895ace11d
commit
d22b7ffc90
2 changed files with 11 additions and 18 deletions
21
discord.go
21
discord.go
|
@ -125,8 +125,7 @@ func New(args ...interface{}) (s *Session, err error) {
|
|||
// AddHandler allows you to add an event handler that will be fired anytime
|
||||
// the given event is triggered.
|
||||
func (s *Session) AddHandler(handler interface{}) {
|
||||
s.Lock()
|
||||
defer s.Unlock()
|
||||
s.initialize()
|
||||
|
||||
handlerType := reflect.TypeOf(handler)
|
||||
|
||||
|
@ -138,11 +137,8 @@ func (s *Session) AddHandler(handler interface{}) {
|
|||
panic("Unable to add event handler, first argument must be of type *discordgo.Session.")
|
||||
}
|
||||
|
||||
if s.handlers == nil {
|
||||
s.Unlock()
|
||||
s.initialize()
|
||||
s.Lock()
|
||||
}
|
||||
s.Lock()
|
||||
defer s.Unlock()
|
||||
|
||||
eventType := handlerType.In(1)
|
||||
|
||||
|
@ -155,12 +151,12 @@ func (s *Session) AddHandler(handler interface{}) {
|
|||
if handlers == nil {
|
||||
handlers = []reflect.Value{}
|
||||
}
|
||||
|
||||
handlers = append(handlers, reflect.ValueOf(handler))
|
||||
s.handlers[eventType] = handlers
|
||||
s.handlers[eventType] = append(handlers, reflect.ValueOf(handler))
|
||||
}
|
||||
|
||||
func (s *Session) handle(event interface{}) {
|
||||
s.initialize()
|
||||
|
||||
s.RLock()
|
||||
defer s.RUnlock()
|
||||
|
||||
|
@ -182,6 +178,11 @@ func (s *Session) handle(event interface{}) {
|
|||
// initialize adds all internal handlers and state tracking handlers.
|
||||
func (s *Session) initialize() {
|
||||
s.Lock()
|
||||
if s.handlers != nil {
|
||||
s.Unlock()
|
||||
return
|
||||
}
|
||||
|
||||
s.handlers = map[interface{}][]reflect.Value{}
|
||||
s.Unlock()
|
||||
|
||||
|
|
8
wsapi.go
8
wsapi.go
|
@ -284,14 +284,6 @@ var eventToInterface = map[string]interface{}{
|
|||
// Events will be handled by any implemented handler in Session.
|
||||
// All unhandled events will then be handled by OnEvent.
|
||||
func (s *Session) event(messageType int, message []byte) {
|
||||
s.RLock()
|
||||
if s.handlers == nil {
|
||||
s.RUnlock()
|
||||
s.initialize()
|
||||
} else {
|
||||
s.RUnlock()
|
||||
}
|
||||
|
||||
var err error
|
||||
var reader io.Reader
|
||||
reader = bytes.NewBuffer(message)
|
||||
|
|
Loading…
Reference in a new issue