Changeset 133 in code for trunk/user.go


Ignore:
Timestamp:
Mar 21, 2020, 7:29:44 AM (5 years ago)
Author:
contact
Message:

Drop messages on closed connections

This prevents this panic:

panic: send on closed channel
goroutine 9 [running]:
git.sr.ht/~emersion/soju.(*upstreamConn).SendMessage(...)

/home/simon/src/soju/upstream.go:866

git.sr.ht/~emersion/soju.(*upstreamConn).handleMessage(0xc000084b40, 0xc000144680, 0x2, 0x0)

/home/simon/src/soju/upstream.go:152 +0x62b

git.sr.ht/~emersion/soju.(*user).run(0xc0000b8070)

/home/simon/src/soju/user.go:144 +0x53d

created by git.sr.ht/~emersion/soju.(*Server).Run

/home/simon/src/soju/server.go:88 +0x286

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/user.go

    r131 r133  
    149149                case upstreamMsg := <-u.upstreamIncoming:
    150150                        msg, uc := upstreamMsg.msg, upstreamMsg.uc
     151                        if uc.closed {
     152                                uc.logger.Printf("ignoring message on closed connection: %v", msg)
     153                                break
     154                        }
    151155                        if err := uc.handleMessage(msg); err != nil {
    152156                                uc.logger.Printf("failed to handle message %q: %v", msg, err)
     
    154158                case downstreamMsg := <-u.downstreamIncoming:
    155159                        msg, dc := downstreamMsg.msg, downstreamMsg.dc
     160                        if dc.isClosed() {
     161                                dc.logger.Printf("ignoring message on closed connection: %v", msg)
     162                                break
     163                        }
    156164                        err := dc.handleMessage(msg)
    157165                        if ircErr, ok := err.(ircError); ok {
Note: See TracChangeset for help on using the changeset viewer.