From 1bdbfbf2ccf5b9abad70983e930f6b6dd268b0d9 Mon Sep 17 00:00:00 2001 From: Justine Alexandra Roberts Tunney Date: Sun, 28 Dec 2014 06:33:23 -0500 Subject: [PATCH] Buffered or unbuffered? That is the question. --- rtp/session.go | 2 +- sip/dialog.go | 2 ++ sip/receiver.go | 9 ++++----- sip/transport.go | 4 ++-- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/rtp/session.go b/rtp/session.go index 175ff69..fce53e4 100644 --- a/rtp/session.go +++ b/rtp/session.go @@ -53,7 +53,7 @@ func NewSession(host string) (rs *Session, err error) { return nil, err } rs = &Session{ - C: make(chan *Frame, 32), + C: make(chan *Frame, 4), E: make(chan error, 1), Sock: sock.(*net.UDPConn), Header: Header{ diff --git a/sip/dialog.go b/sip/dialog.go index 0460f13..1374531 100755 --- a/sip/dialog.go +++ b/sip/dialog.go @@ -256,6 +256,8 @@ func (dls *dialogState) cleanup() { if dls.sock != nil { dls.sock.Close() dls.sock = nil + _, _ = <-dls.sockMsgs + <-dls.sockErrs } } diff --git a/sip/receiver.go b/sip/receiver.go index 367a976..5d766e7 100644 --- a/sip/receiver.go +++ b/sip/receiver.go @@ -1,7 +1,6 @@ package sip import ( - "github.com/jart/gosip/util" "log" "net" "strconv" @@ -13,10 +12,8 @@ func ReceiveMessages(contact *Addr, sock *net.UDPConn, c chan<- *Msg, e chan<- e for { amt, addr, err := sock.ReadFromUDP(buf) if err != nil { - if !util.IsUseOfClosed(err) { - e <- err - } - return + e <- err + break } ts := time.Now() packet := string(buf[0:amt]) @@ -36,6 +33,8 @@ func ReceiveMessages(contact *Addr, sock *net.UDPConn, c chan<- *Msg, e chan<- e fixMessagesFromStrictRouters(contact, msg) c <- msg } + close(c) + close(e) } func addReceived(msg *Msg, addr *net.UDPAddr) { diff --git a/sip/transport.go b/sip/transport.go index 40cf50c..0567925 100755 --- a/sip/transport.go +++ b/sip/transport.go @@ -48,8 +48,8 @@ func NewTransport(contact *Addr) (tp *Transport, err error) { contact.Next = nil contact.Uri.Port = uint16(addr.Port) contact.Uri.Params["transport"] = "udp" - c := make(chan *Msg, 32) - e := make(chan error, 1) + c := make(chan *Msg) + e := make(chan error) tp = &Transport{ C: c, E: e,