Changeset 203 in code for trunk


Ignore:
Timestamp:
Apr 1, 2020, 1:48:56 PM (5 years ago)
Author:
contact
Message:

Stop ring consumers when deleting network

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/downstream.go

    r194 r203  
    740740                        var closed bool
    741741                        select {
    742                         case <-ch:
     742                        case _, ok := <-ch:
     743                                if !ok {
     744                                        closed = true
     745                                        break
     746                                }
     747
    743748                                uc := net.upstream()
    744749                                if uc == nil {
  • trunk/ring.go

    r138 r203  
    1717        cur       uint64
    1818        consumers []*RingConsumer
     19        closed    bool
    1920}
    2021
     
    3233        defer r.lock.Unlock()
    3334
     35        if r.closed {
     36                panic("soju: Ring.Produce called after Close")
     37        }
     38
    3439        i := int(r.cur % r.cap)
    3540        r.buffer[i] = msg
     
    4449                }
    4550        }
     51}
     52
     53func (r *Ring) Close() {
     54        r.lock.Lock()
     55        defer r.lock.Unlock()
     56
     57        if r.closed {
     58                panic("soju: Ring.Close called twice")
     59        }
     60
     61        for _, rc := range r.consumers {
     62                close(rc.ch)
     63        }
     64
     65        r.closed = true
    4666}
    4767
  • trunk/user.go

    r202 r203  
    306306
    307307                net.Stop()
     308                net.ring.Close()
    308309                u.networks = append(u.networks[:i], u.networks[i+1:]...)
    309310                return nil
Note: See TracChangeset for help on using the changeset viewer.