Changeset 175 in code
- Timestamp:
- Mar 27, 2020, 10:08:35 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/upstream.go
r174 r175 37 37 user *user 38 38 outgoing chan<- *irc.Message 39 closed chan struct{} 39 40 40 41 serverName string … … 48 49 username string 49 50 realname string 50 closed bool51 51 modes userModes 52 52 channels map[string]*upstreamChannel … … 96 96 97 97 go func() { 98 for msg := range outgoing { 99 if uc.srv.Debug { 100 uc.logger.Printf("sent: %v", msg) 101 } 102 if err := uc.irc.WriteMessage(msg); err != nil { 103 uc.logger.Printf("failed to write message: %v", err) 98 for { 99 var closed bool 100 select { 101 case msg := <-outgoing: 102 if uc.srv.Debug { 103 uc.logger.Printf("sent: %v", msg) 104 } 105 if err := uc.irc.WriteMessage(msg); err != nil { 106 uc.logger.Printf("failed to write message: %v", err) 107 } 108 case <-uc.closed: 109 closed = true 110 } 111 if closed { 112 break 104 113 } 105 114 } … … 114 123 } 115 124 125 func (uc *upstreamConn) isClosed() bool { 126 select { 127 case <-uc.closed: 128 return true 129 default: 130 return false 131 } 132 } 133 116 134 func (uc *upstreamConn) Close() error { 117 if uc. closed{135 if uc.isClosed() { 118 136 return fmt.Errorf("upstream connection already closed") 119 137 } 120 close(uc.outgoing) 121 uc.closed = true 138 close(uc.closed) 122 139 return nil 123 140 } -
trunk/user.go
r168 r175 65 65 uc.register() 66 66 67 // TODO: wait for the connection to be registered before adding it to 68 // net, otherwise messages might be sent to it while still being 69 // unauthenticated 67 70 net.lock.Lock() 68 71 net.conn = uc … … 113 116 for _, network := range u.networks { 114 117 uc := network.upstream() 115 if uc == nil || !uc.registered || uc.closed{118 if uc == nil || !uc.registered { 116 119 continue 117 120 } … … 153 156 case eventUpstreamMessage: 154 157 msg, uc := e.msg, e.uc 155 if uc. closed{158 if uc.isClosed() { 156 159 uc.logger.Printf("ignoring message on closed connection: %v", msg) 157 160 break
Note:
See TracChangeset
for help on using the changeset viewer.