github.com/insolar/vanilla@v0.0.0-20201023172447-248fdf805322/synckit/closed_channel.go (about)

     1  // Copyright 2020 Insolar Network Ltd.
     2  // All rights reserved.
     3  // This material is licensed under the Insolar License version 1.0,
     4  // available at https://github.com/insolar/assured-ledger/blob/master/LICENSE.md.
     5  
     6  package synckit
     7  
     8  import "github.com/insolar/vanilla/throw"
     9  
    10  type SignalChannel = <-chan struct{}
    11  
    12  type ClosableSignalChannel = chan struct{}
    13  
    14  func ClosedChannel() SignalChannel {
    15  	return closedChan
    16  }
    17  
    18  var closedChan = func() SignalChannel {
    19  	c := make(ClosableSignalChannel)
    20  	close(c)
    21  	return c
    22  }()
    23  
    24  func SafeClose(c ClosableSignalChannel) (err error) {
    25  	defer func() {
    26  		err = throw.R(recover(), err)
    27  	}()
    28  	close(c)
    29  	return nil
    30  }