func (r *roomWorker) Broadcast(sessionID string, message buffercache.Buffer) { worker := func() { r.mutex.RLock() for id, user := range r.users { if id == sessionID || user.Sender == nil { // Skip broadcast to self or non existing sender. continue } //fmt.Printf("%s\n", m.Message) user.Send(message) } r.mutex.RUnlock() message.Decref() } message.Incref() r.Run(worker) }