Skip to content

Commit 458b5c5

Browse files
committed
server: make start blocking
1 parent d613085 commit 458b5c5

File tree

2 files changed

+19
-18
lines changed

2 files changed

+19
-18
lines changed

cmd/redka/main.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,14 +121,21 @@ func main() {
121121
}
122122
slog.Info("data source", "path", config.Path)
123123

124-
// Start the server.
124+
// Create the server.
125125
var srv *server.Server
126126
if config.Sock != "" {
127127
srv = server.New("unix", config.Sock, db)
128128
} else {
129129
srv = server.New("tcp", config.Addr(), db)
130130
}
131-
srv.Start()
131+
132+
// Start the server.
133+
go func() {
134+
if err := srv.Start(); err != nil {
135+
slog.Error("start server", "error", err)
136+
os.Exit(1)
137+
}
138+
}()
132139

133140
// Wait for a shutdown signal.
134141
<-ctx.Done()

internal/server/server.go

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
package server
33

44
import (
5+
"fmt"
56
"log/slog"
6-
"sync"
77

88
"github.com/nalgeon/redka"
99
"github.com/tidwall/redcon"
@@ -15,7 +15,6 @@ type Server struct {
1515
addr string
1616
srv *redcon.Server
1717
db *redka.DB
18-
wg *sync.WaitGroup
1918
}
2019

2120
// New creates a new Redka server.
@@ -37,37 +36,32 @@ func New(net string, addr string, db *redka.DB) *Server {
3736
addr: addr,
3837
srv: redcon.NewServerNetwork(net, addr, handler, accept, closed),
3938
db: db,
40-
wg: &sync.WaitGroup{},
4139
}
4240
}
4341

4442
// Start starts the server.
45-
func (s *Server) Start() {
46-
s.wg.Add(1)
47-
go func() {
48-
defer s.wg.Done()
49-
slog.Info("serve connections", "addr", s.addr)
50-
err := s.srv.ListenAndServe()
51-
if err != nil {
52-
slog.Error("serve connections", "error", err)
53-
}
54-
}()
43+
func (s *Server) Start() error {
44+
slog.Info("start redcon server", "addr", s.addr)
45+
err := s.srv.ListenAndServe()
46+
if err != nil {
47+
return fmt.Errorf("start redcon server: %w", err)
48+
}
49+
return nil
5550
}
5651

5752
// Stop stops the server.
5853
func (s *Server) Stop() error {
5954
err := s.srv.Close()
6055
if err != nil {
61-
return err
56+
return fmt.Errorf("stop redcon server: %w", err)
6257
}
6358
slog.Debug("close redcon server", "addr", s.addr)
6459

6560
err = s.db.Close()
6661
if err != nil {
67-
return err
62+
return fmt.Errorf("close database: %w", err)
6863
}
6964
slog.Debug("close database")
7065

71-
s.wg.Wait()
7266
return nil
7367
}

0 commit comments

Comments
 (0)