Fix closer for ivideon source
This commit is contained in:
+15
-5
@@ -14,6 +14,7 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -26,12 +27,11 @@ type Client struct {
|
|||||||
medias []*streamer.Media
|
medias []*streamer.Media
|
||||||
tracks map[byte]*streamer.Track
|
tracks map[byte]*streamer.Track
|
||||||
|
|
||||||
closed bool
|
|
||||||
|
|
||||||
msg *message
|
msg *message
|
||||||
t0 time.Time
|
t0 time.Time
|
||||||
|
|
||||||
buffer chan []byte
|
buffer chan []byte
|
||||||
|
mu sync.Mutex
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewClient(id string) *Client {
|
func NewClient(id string) *Client {
|
||||||
@@ -87,7 +87,11 @@ func (c *Client) Handle() error {
|
|||||||
|
|
||||||
track := c.tracks[c.msg.Track]
|
track := c.tracks[c.msg.Track]
|
||||||
if track != nil {
|
if track != nil {
|
||||||
c.buffer <- data
|
c.mu.Lock()
|
||||||
|
if c.buffer != nil {
|
||||||
|
c.buffer <- data
|
||||||
|
}
|
||||||
|
c.mu.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
// we have one unprocessed msg after getTracks
|
// we have one unprocessed msg after getTracks
|
||||||
@@ -114,7 +118,11 @@ func (c *Client) Handle() error {
|
|||||||
|
|
||||||
track = c.tracks[msg.Track]
|
track = c.tracks[msg.Track]
|
||||||
if track != nil {
|
if track != nil {
|
||||||
c.buffer <- data
|
c.mu.Lock()
|
||||||
|
if c.buffer != nil {
|
||||||
|
c.buffer <- data
|
||||||
|
}
|
||||||
|
c.mu.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -127,10 +135,12 @@ func (c *Client) Close() error {
|
|||||||
if c.conn == nil {
|
if c.conn == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
c.mu.Lock()
|
||||||
if c.buffer != nil {
|
if c.buffer != nil {
|
||||||
close(c.buffer)
|
close(c.buffer)
|
||||||
|
c.buffer = nil
|
||||||
}
|
}
|
||||||
c.closed = true
|
c.mu.Unlock()
|
||||||
return c.conn.Close()
|
return c.conn.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ func (c *Client) GetTrack(media *streamer.Media, codec *streamer.Codec) *streame
|
|||||||
|
|
||||||
func (c *Client) Start() error {
|
func (c *Client) Start() error {
|
||||||
err := c.Handle()
|
err := c.Handle()
|
||||||
if c.closed {
|
if c.buffer == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
|
|||||||
Reference in New Issue
Block a user