Changeset 175 in code for trunk/upstream.go
- Timestamp:
- Mar 27, 2020, 10:08:35 PM (5 years ago)
- File:
-
- 1 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 }
Note:
See TracChangeset
for help on using the changeset viewer.