forked from Aize-Public/forego
-
Notifications
You must be signed in to change notification settings - Fork 0
/
accessors.go
49 lines (37 loc) · 1.11 KB
/
accessors.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package shutdown
import (
"errors"
"github.com/ohait/forego/ctx"
)
// Use to signal that an operation can't be executed because the system is shutting down
var Err = errors.New("shutdown")
type ReleaseFn func()
func (fn ReleaseFn) Release() { fn() }
// start a global shutdown unless already started
func Begin() {
shutdowner.begin()
}
// return a closed channel when the shutdown has started
func Started() <-chan struct{} {
return shutdowner.started()
}
// return a closed channel 5 seconds after the shutdown has started
func Started5Sec() <-chan struct{} {
return shutdowner.started5Sec()
}
// returns a channel that will close when the shutdown has completed
func Done() <-chan struct{} {
return shutdowner.done()
}
// prevent the shutdown to complete until released
func Hold() ReleaseFn {
return shutdowner.hold()
}
// prevents the shutdown to complete until released, and also wait for the shutdown to start
func HoldAndWait() ReleaseFn {
return shutdowner.holdAndWait()
}
// setup signals and wait for the shutdown to complete
func WaitForSignal(c ctx.C, cf ctx.CancelFunc) {
shutdowner.waitForSignal(c, cf)
}