Skip to content

Commit f76d778

Browse files
committed
refactor(event): improve code
Signed-off-by: Kevin Cui <[email protected]>
1 parent 3776341 commit f76d778

File tree

2 files changed

+21
-27
lines changed

2 files changed

+21
-27
lines changed

cmd/ovm/main.go

+3-11
Original file line numberDiff line numberDiff line change
@@ -68,17 +68,9 @@ func main() {
6868
exit(1)
6969
}
7070

71-
{
72-
if err := event.Init(opt); err != nil {
73-
_ = log.Errorf("event init error: %v", err)
74-
exit(1)
75-
}
76-
77-
g := errgroup.Group{}
78-
event.Subscribe(&g)
79-
cleans = append(cleans, func() {
80-
_ = g.Wait()
81-
})
71+
if err := event.Setup(opt); err != nil {
72+
_ = log.Errorf("event init error: %v", err)
73+
exit(1)
8274
}
8375

8476
agent, err := sshagentsock.Start(opt.SSHAuthSocketPath, log)

pkg/ipc/event/event.go

+18-16
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import (
1414
"github.com/Code-Hex/go-infinity-channel"
1515
"github.com/oomol-lab/ovm/pkg/cli"
1616
"github.com/oomol-lab/ovm/pkg/logger"
17-
"golang.org/x/sync/errgroup"
1817
)
1918

2019
type key string
@@ -48,7 +47,10 @@ type event struct {
4847

4948
var e *event
5049

51-
func Init(opt *cli.Context) error {
50+
// see: https://github.com/Code-Hex/go-infinity-channel/issues/1
51+
var waitDone = make(chan struct{})
52+
53+
func Setup(opt *cli.Context) error {
5254
log, err := logger.New(opt.LogPath, opt.Name+"-event")
5355
if err != nil {
5456
return err
@@ -75,15 +77,7 @@ func Init(opt *cli.Context) error {
7577
channel: infinity.NewChannel[*datum](),
7678
}
7779

78-
return nil
79-
}
80-
81-
func Subscribe(g *errgroup.Group) {
82-
if e == nil {
83-
return
84-
}
85-
86-
g.Go(func() error {
80+
go func() {
8781
for datum := range e.channel.Out() {
8882
uri := fmt.Sprintf("http://ovm/notify?event=%s&message=%s", datum.name, url.QueryEscape(datum.message))
8983
e.log.Infof("notify %s event to %s", datum.name, uri)
@@ -98,14 +92,13 @@ func Subscribe(g *errgroup.Group) {
9892
}
9993

10094
if datum.message == string(Exit) {
101-
e.channel.Close()
102-
e = nil
103-
return nil
95+
waitDone <- struct{}{}
96+
return
10497
}
10598
}
99+
}()
106100

107-
return nil
108-
})
101+
return nil
109102
}
110103

111104
func NotifyApp(name app) {
@@ -117,6 +110,15 @@ func NotifyApp(name app) {
117110
name: kApp,
118111
message: string(name),
119112
}
113+
114+
// wait for the event to be processed
115+
// Exit event indicates the main process exit
116+
if string(name) == string(Exit) {
117+
<-waitDone
118+
close(waitDone)
119+
e.channel.Close()
120+
e = nil
121+
}
120122
}
121123

122124
func NotifyError(err error) {

0 commit comments

Comments
 (0)