Changeset 311 in code for trunk/user.go


Ignore:
Timestamp:
Jun 3, 2020, 3:28:31 PM (5 years ago)
Author:
contact
Message:

Introduce network.isClosed

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/user.go

    r309 r311  
    8989}
    9090
     91func (net *network) isStopped() bool {
     92        select {
     93        case <-net.stopped:
     94                return true
     95        default:
     96                return false
     97        }
     98}
     99
    91100func (net *network) run() {
    92101        var lastTry time.Time
    93102        for {
    94                 select {
    95                 case <-net.stopped:
     103                if net.isStopped() {
    96104                        return
    97                 default:
    98                         // This space is intentionally left blank
    99105                }
    100106
     
    121127                }
    122128
     129                // TODO: this is racy with net.stopped. If the network is stopped
     130                // before the user goroutine receives eventUpstreamConnected, the
     131                // connection won't be closed.
    123132                net.user.events <- eventUpstreamConnected{uc}
    124133                if err := uc.readMessages(net.user.events); err != nil {
     
    132141
    133142func (net *network) stop() {
    134         select {
    135         case <-net.stopped:
    136                 return
    137         default:
     143        if !net.isStopped() {
    138144                close(net.stopped)
    139145        }
Note: See TracChangeset for help on using the changeset viewer.