Changeset 230 in code for trunk/downstream.go


Ignore:
Timestamp:
Apr 6, 2020, 4:23:39 PM (5 years ago)
Author:
contact
Message:

Remove downstreamConn.lock

Everything is now accessed from the user goroutine now that the
per-network ring buffer goroutine is gone.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/downstream.go

    r228 r230  
    99        "strconv"
    1010        "strings"
    11         "sync"
    1211        "time"
    1312
     
    6968
    7069        ringConsumers map[*network]*RingConsumer
     70        ourMessages map[*irc.Message]struct{}
     71        caps        map[string]bool
    7172
    7273        negociatingCaps bool
     
    7475
    7576        saslServer sasl.Server
    76 
    77         lock        sync.Mutex
    78         ourMessages map[*irc.Message]struct{}
    79         caps        map[string]bool
    8077}
    8178
     
    210207}
    211208
    212 func (dc *downstreamConn) getCap(name string) bool {
    213         dc.lock.Lock()
    214         defer dc.lock.Unlock()
    215         return dc.caps[name]
    216 }
    217 
     209// SendMessage sends an outgoing message.
     210//
     211// This can only called from the user goroutine.
    218212func (dc *downstreamConn) SendMessage(msg *irc.Message) {
    219         if !dc.getCap("message-tags") {
     213        if !dc.caps["message-tags"] {
    220214                msg = msg.Copy()
    221215                for name := range msg.Tags {
     
    223217                        switch name {
    224218                        case "time":
    225                                 supported = dc.getCap("server-time")
     219                                supported = dc.caps["server-time"]
    226220                        }
    227221                        if !supported {
     
    235229
    236230func (dc *downstreamConn) sendFromUpstream(msg *irc.Message, uc *upstreamConn) {
    237         dc.lock.Lock()
    238231        _, ours := dc.ourMessages[msg]
    239232        delete(dc.ourMessages, msg)
    240         dc.lock.Unlock()
    241         if ours && !dc.getCap("echo-message") {
     233        if ours && !dc.caps["echo-message"] {
    242234                // The message comes from our connection, don't echo it
    243235                // back
     
    301293                }
    302294        case "AUTHENTICATE":
    303                 if !dc.getCap("sasl") {
     295                if !dc.caps["sasl"] {
    304296                        return ircError{&irc.Message{
    305297                                Command: irc.ERR_SASLFAIL,
     
    442434        case "LIST":
    443435                var caps []string
    444                 dc.lock.Lock()
    445436                for name := range dc.caps {
    446437                        caps = append(caps, name)
    447438                }
    448                 dc.lock.Unlock()
    449439
    450440                // TODO: multi-line replies
     
    464454                caps := strings.Fields(args[0])
    465455                ack := true
    466                 dc.lock.Lock()
    467456                for _, name := range caps {
    468457                        name = strings.ToLower(name)
     
    484473                        }
    485474                }
    486                 dc.lock.Unlock()
    487475
    488476                reply := "NAK"
     
    12131201                                Params:  []string{upstreamName, text},
    12141202                        }
    1215                         dc.lock.Lock()
    12161203                        dc.ourMessages[echoMsg] = struct{}{}
    1217                         dc.lock.Unlock()
    12181204
    12191205                        uc.appendLog(upstreamName, echoMsg)
Note: See TracChangeset for help on using the changeset viewer.