123456789101112131415161718192021222324252627282930313233343536 |
- package watch
- type FileChanges struct {
- Modified chan bool // Channel to get notified of modifications
- Truncated chan bool // Channel to get notified of truncations
- Deleted chan bool // Channel to get notified of deletions/renames
- }
- func NewFileChanges() *FileChanges {
- return &FileChanges{
- make(chan bool, 1), make(chan bool, 1), make(chan bool, 1)}
- }
- func (fc *FileChanges) NotifyModified() {
- sendOnlyIfEmpty(fc.Modified)
- }
- func (fc *FileChanges) NotifyTruncated() {
- sendOnlyIfEmpty(fc.Truncated)
- }
- func (fc *FileChanges) NotifyDeleted() {
- sendOnlyIfEmpty(fc.Deleted)
- }
- // sendOnlyIfEmpty sends on a bool channel only if the channel has no
- // backlog to be read by other goroutines. This concurrency pattern
- // can be used to notify other goroutines if and only if they are
- // looking for it (i.e., subsequent notifications can be compressed
- // into one).
- func sendOnlyIfEmpty(ch chan bool) {
- select {
- case ch <- true:
- default:
- }
- }
|