mirror of
https://github.com/jech/galene.git
synced 2024-11-10 02:35:58 +01:00
Fail addLocal if connection is closed.
This commit is contained in:
parent
7972edfc8b
commit
37b1994069
3 changed files with 41 additions and 18 deletions
33
conn.go
33
conn.go
|
@ -50,17 +50,19 @@ func (up *upTrack) notifyLocal(add bool, track downTrack) {
|
|||
}
|
||||
}
|
||||
|
||||
func (up *upTrack) addLocal(local downTrack) {
|
||||
func (up *upTrack) addLocal(local downTrack) error {
|
||||
up.mu.Lock()
|
||||
for _, t := range up.local {
|
||||
if t == local {
|
||||
up.mu.Unlock()
|
||||
return
|
||||
return nil
|
||||
}
|
||||
}
|
||||
up.local = append(up.local, local)
|
||||
up.mu.Unlock()
|
||||
|
||||
up.notifyLocal(true, local)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (up *upTrack) delLocal(local downTrack) bool {
|
||||
|
@ -108,19 +110,25 @@ type upConnection struct {
|
|||
iceCandidates []*webrtc.ICECandidateInit
|
||||
|
||||
mu sync.Mutex
|
||||
closed bool
|
||||
local []downConnection
|
||||
}
|
||||
|
||||
func (up *upConnection) addLocal(local downConnection) {
|
||||
var ErrConnectionClosed = errors.New("connection is closed")
|
||||
|
||||
func (up *upConnection) addLocal(local downConnection) error {
|
||||
up.mu.Lock()
|
||||
defer up.mu.Unlock()
|
||||
if up.closed {
|
||||
return ErrConnectionClosed
|
||||
}
|
||||
for _, t := range up.local {
|
||||
if t == local {
|
||||
up.mu.Unlock()
|
||||
return
|
||||
return nil
|
||||
}
|
||||
}
|
||||
up.local = append(up.local, local)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (up *upConnection) delLocal(local downConnection) bool {
|
||||
|
@ -143,6 +151,21 @@ func (up *upConnection) getLocal() []downConnection {
|
|||
return local
|
||||
}
|
||||
|
||||
func (up *upConnection) Close() error {
|
||||
up.mu.Lock()
|
||||
defer up.mu.Unlock()
|
||||
|
||||
go func(local []downConnection) {
|
||||
for _, l := range local {
|
||||
l.Close()
|
||||
}
|
||||
}(up.local)
|
||||
|
||||
up.local = nil
|
||||
up.closed = true
|
||||
return up.pc.Close()
|
||||
}
|
||||
|
||||
func (up *upConnection) addICECandidate(candidate *webrtc.ICECandidateInit) error {
|
||||
if up.pc.RemoteDescription() != nil {
|
||||
return up.pc.AddICECandidate(*candidate)
|
||||
|
|
5
disk.go
5
disk.go
|
@ -194,7 +194,10 @@ func newDiskConn(directory, label string, up *upConnection, remoteTracks []*upTr
|
|||
}
|
||||
}
|
||||
|
||||
up.addLocal(&conn)
|
||||
err := up.addLocal(&conn)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &conn, nil
|
||||
}
|
||||
|
|
17
webclient.go
17
webclient.go
|
@ -675,14 +675,7 @@ func delUpConn(c *webClient, id string) bool {
|
|||
}
|
||||
}
|
||||
|
||||
local := conn.getLocal()
|
||||
go func() {
|
||||
for _, l := range local {
|
||||
l.Close()
|
||||
}
|
||||
}()
|
||||
|
||||
conn.pc.Close()
|
||||
conn.Close()
|
||||
delete(c.up, id)
|
||||
return true
|
||||
}
|
||||
|
@ -744,9 +737,13 @@ func addDownConn(c *webClient, id string, remote *upConnection) (*rtpDownConnect
|
|||
conn.pc.Close()
|
||||
return nil, errors.New("Adding duplicate connection")
|
||||
}
|
||||
c.down[id] = conn
|
||||
err = remote.addLocal(conn)
|
||||
if err != nil {
|
||||
conn.pc.Close()
|
||||
return nil, err
|
||||
}
|
||||
|
||||
remote.addLocal(conn)
|
||||
c.down[id] = conn
|
||||
return conn, nil
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue