]> code.octet-stream.net Git - broadcaster/blobdiff - server/files.go
Fix races in status message accumulation
[broadcaster] / server / files.go
index 4d6e2939912f76afc8d5760b2c741d788f68fd6e..b452997ef8248312f4ac139942cbddcd9f57354c 100644 (file)
@@ -7,6 +7,7 @@ import (
        "log"
        "os"
        "path/filepath"
        "log"
        "os"
        "path/filepath"
+       "sync"
 )
 
 type FileSpec struct {
 )
 
 type FileSpec struct {
@@ -18,6 +19,7 @@ type AudioFiles struct {
        path       string
        list       []FileSpec
        changeWait chan bool
        path       string
        list       []FileSpec
        changeWait chan bool
+       filesMutex sync.Mutex
 }
 
 var files AudioFiles
 }
 
 var files AudioFiles
@@ -36,6 +38,8 @@ func (r *AudioFiles) Refresh() {
                log.Println("couldn't read dir", r.path)
                return
        }
                log.Println("couldn't read dir", r.path)
                return
        }
+       r.filesMutex.Lock()
+       defer r.filesMutex.Unlock()
        r.list = nil
        for _, file := range entries {
                f, err := os.Open(filepath.Join(r.path, file.Name()))
        r.list = nil
        for _, file := range entries {
                f, err := os.Open(filepath.Join(r.path, file.Name()))
@@ -57,6 +61,8 @@ func (r *AudioFiles) Path() string {
 }
 
 func (r *AudioFiles) Files() []FileSpec {
 }
 
 func (r *AudioFiles) Files() []FileSpec {
+       r.filesMutex.Lock()
+       defer r.filesMutex.Unlock()
        return r.list
 }
 
        return r.list
 }
 
@@ -68,6 +74,8 @@ func (r *AudioFiles) Delete(filename string) {
        }
 }
 
        }
 }
 
-func (r *AudioFiles) ChangeChannel() chan bool {
-       return r.changeWait
+func (r *AudioFiles) WatchForChanges() ([]FileSpec, chan bool) {
+       r.filesMutex.Lock()
+       defer r.filesMutex.Unlock()
+       return r.list, r.changeWait
 }
 }