summaryrefslogtreecommitdiffhomepage
path: root/go/observable.go
diff options
context:
space:
mode:
authorAndrei Belov <defan@nginx.com>2019-12-26 17:52:09 +0300
committerAndrei Belov <defan@nginx.com>2019-12-26 17:52:09 +0300
commit35ff5ee1e82a03e57d625230173a84c829c13257 (patch)
treec3dce5e8d50c8da9739f23b41a636931ad562e25 /go/observable.go
parent0ec222bbb202194327c2e76d48f0b2608b37c162 (diff)
parent55f8e31ed70910ef07db31d7f3c53b12774180f9 (diff)
downloadunit-35ff5ee1e82a03e57d625230173a84c829c13257.tar.gz
unit-35ff5ee1e82a03e57d625230173a84c829c13257.tar.bz2
Merged with the default branch.1.14.0-1
Diffstat (limited to '')
-rw-r--r--go/observable.go32
1 files changed, 32 insertions, 0 deletions
diff --git a/go/observable.go b/go/observable.go
new file mode 100644
index 00000000..9a38802c
--- /dev/null
+++ b/go/observable.go
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) NGINX, Inc.
+ */
+
+package unit
+
+import (
+ "sync"
+)
+
+type observable struct {
+ sync.Mutex
+ observers []chan int
+}
+
+func (o *observable) attach(c chan int) {
+ o.Lock()
+ defer o.Unlock()
+
+ o.observers = append(o.observers, c)
+}
+
+func (o *observable) notify(e int) {
+ o.Lock()
+ defer o.Unlock()
+
+ for _, v := range o.observers {
+ v <- e
+ }
+
+ o.observers = nil
+}