func (n *node) process(e raftpb.Entry, pending chan struct{}) { if e.Type != raftpb.EntryNormal { return } pending <- struct{}{} // This will block until we can write to it. var proposal task.Proposal x.Check(proposal.Unmarshal(e.Data)) var err error if proposal.Mutations != nil { err = n.processMutation(e, proposal.Mutations) } else if proposal.Membership != nil { err = n.processMembership(e, proposal.Membership) } n.props.Done(proposal.Id, err) <-pending // Release one. }