Advertisement
Guest User

data race?

a guest
Feb 15th, 2013
66
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. type FireEffect struct {
  2.         r       *rand.Rand
  3.         lamp    lampbase.StripeLamp
  4.         borders []borderpair
  5.         stdDev  float64
  6.         config  FireConfig
  7.         ch      chan interface{}
  8.         t       tomb.Tomb
  9.         m       sync.RWMutex
  10. }
  11.  
  12. func (f *FireEffect) Config() interface{} {
  13.         f.m.RLock()
  14.         conf := f.config
  15.         f.m.RUnlock()
  16.         return &conf
  17. }
  18.  
  19. func (f *FireEffect) ConfigChan() chan interface{} {
  20.         return f.ch
  21. }
  22.  
  23. func (f *FireEffect) Tomb() *tomb.Tomb {
  24.         return &f.t
  25. }
  26.  
  27. func (f *FireEffect) Apply() {
  28.         defer f.t.Done()
  29.         for {
  30.                 select {
  31.                 case <-f.t.Dying():
  32.                         close(f.ch)
  33.                         return
  34.                 case confRecv := <-f.ch:
  35.                         newConf, ok := confRecv.(*FireConfig)
  36.                         if !ok {
  37.                                 close(f.ch)
  38.                                 f.t.Killf("Received config that wasn't *FireConfig", confRecv)
  39.                                 return
  40.                         }
  41.                         f.m.Lock()
  42.                         f.config = *newConf
  43.                         f.m.Unlock()
  44.                 default:
  45.                 }
  46.                 f.colorizeLamp()
  47.                 time.Sleep(30 * time.Millisecond)
  48.         }
  49.  
  50. }
Advertisement
RAW Paste Data Copied
Advertisement