Fix data race in drivers

This commit is contained in:
Atsushi Watanabe
2020-02-19 15:38:51 +09:00
committed by Lukas Herman
parent 2bac44aa8a
commit 33b2964733
4 changed files with 14 additions and 7 deletions
+3 -1
View File
@@ -44,9 +44,11 @@ func (d *dummy) AudioRecord(p prop.Media) (audio.Reader, error) {
nextReadTime := time.Now()
var phase int
closed := d.closed
reader := audio.ReaderFunc(func(samples [][2]float32) (int, error) {
select {
case <-d.closed:
case <-closed:
return 0, io.EOF
default:
}
+4 -2
View File
@@ -123,6 +123,8 @@ func (c *camera) VideoRecord(p prop.Media) (video.Reader, error) {
return nil, err
}
cam := c.cam
ctx, cancel := context.WithCancel(context.Background())
c.cancel = cancel
var buf []byte
@@ -138,7 +140,7 @@ func (c *camera) VideoRecord(p prop.Media) (video.Reader, error) {
return nil, io.EOF
}
err := c.cam.WaitForFrame(5) // 5 seconds
err := cam.WaitForFrame(5) // 5 seconds
switch err.(type) {
case nil:
case *webcam.Timeout:
@@ -148,7 +150,7 @@ func (c *camera) VideoRecord(p prop.Media) (video.Reader, error) {
return nil, err
}
b, err := c.cam.ReadFrame()
b, err := cam.ReadFrame()
if err != nil {
// Camera has been stopped.
return nil, err
+2 -1
View File
@@ -66,10 +66,11 @@ func (s *screen) VideoRecord(p prop.Media) (video.Reader, error) {
s.tick = time.NewTicker(time.Duration(float32(time.Second) / p.FrameRate))
var dst image.RGBA
reader := s.reader
r := video.ReaderFunc(func() (image.Image, error) {
<-s.tick.C
return s.reader.Read().ToRGBA(&dst), nil
return reader.Read().ToRGBA(&dst), nil
})
return r, nil
}
+5 -3
View File
@@ -99,16 +99,18 @@ func (d *dummy) VideoRecord(p prop.Media) (video.Reader, error) {
}
random := rand.New(rand.NewSource(0))
d.tick = time.NewTicker(time.Duration(float32(time.Second) / p.FrameRate))
tick := time.NewTicker(time.Duration(float32(time.Second) / p.FrameRate))
d.tick = tick
closed := d.closed
r := video.ReaderFunc(func() (image.Image, error) {
select {
case <-d.closed:
case <-closed:
return nil, io.EOF
default:
}
<-d.tick.C
<-tick.C
copy(yy, yyBase)
copy(cb, cbBase)