Changeset 166 in code


Ignore:
Timestamp:
Mar 27, 2020, 4:21:05 PM (5 years ago)
Author:
contact
Message:

Add eventDownstreamConnected

In a later commit, we'll be able to move part of downstreamConn.register
into the user goroutine to prevent races.

References: https://todo.sr.ht/~emersion/soju/22

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/downstream.go

    r165 r166  
    661661        dc.logger.Printf("registration complete for user %q", dc.username)
    662662
    663         firstDownstream := dc.user.addDownstream(dc)
     663        dc.user.lock.Lock()
     664        firstDownstream := len(dc.user.downstreamConns) == 0
     665        dc.user.lock.Unlock()
    664666
    665667        dc.SendMessage(&irc.Message{
  • trunk/server.go

    r165 r166  
    120120                                dc.logger.Print(err)
    121121                        } else {
     122                                dc.user.events <- eventDownstreamConnected{dc}
    122123                                if err := dc.readMessages(dc.user.events); err != nil {
    123124                                        dc.logger.Print(err)
  • trunk/user.go

    r165 r166  
    1818        msg *irc.Message
    1919        dc  *downstreamConn
     20}
     21
     22type eventDownstreamConnected struct {
     23        dc *downstreamConn
    2024}
    2125
     
    161165                                uc.logger.Printf("failed to handle message %q: %v", msg, err)
    162166                        }
     167                case eventDownstreamConnected:
     168                        dc := e.dc
     169                        u.lock.Lock()
     170                        u.downstreamConns = append(u.downstreamConns, dc)
     171                        u.lock.Unlock()
    163172                case eventDownstreamMessage:
    164173                        msg, dc := e.msg, e.dc
     
    181190}
    182191
    183 func (u *user) addDownstream(dc *downstreamConn) (first bool) {
    184         u.lock.Lock()
    185         first = len(dc.user.downstreamConns) == 0
    186         u.downstreamConns = append(u.downstreamConns, dc)
    187         u.lock.Unlock()
    188         return first
    189 }
    190 
    191192func (u *user) removeDownstream(dc *downstreamConn) {
    192193        u.lock.Lock()
Note: See TracChangeset for help on using the changeset viewer.