File tree Expand file tree Collapse file tree 1 file changed +20
-3
lines changed Expand file tree Collapse file tree 1 file changed +20
-3
lines changed Original file line number Diff line number Diff line change @@ -32,6 +32,7 @@ type IprotoServer struct {
32
32
firstError error
33
33
perf PerfCount
34
34
schemaID uint64
35
+ wg sync.WaitGroup
35
36
}
36
37
37
38
type IprotoServerOptions struct {
@@ -131,7 +132,10 @@ func (s *IprotoServer) Shutdown() error {
131
132
if s .onShutdown != nil {
132
133
s .onShutdown (err )
133
134
}
134
- s .conn .Close ()
135
+ go func () {
136
+ s .wg .Wait ()
137
+ s .conn .Close ()
138
+ }()
135
139
})
136
140
137
141
return err
@@ -166,15 +170,25 @@ func (s *IprotoServer) greet() (err error) {
166
170
}
167
171
168
172
func (s * IprotoServer ) loop () {
169
- go s .read ()
170
- go s .write ()
173
+ s .wg .Add (2 )
174
+
175
+ go func () {
176
+ defer s .wg .Done ()
177
+ s .read ()
178
+ }()
179
+
180
+ go func () {
181
+ defer s .wg .Done ()
182
+ s .write ()
183
+ }()
171
184
}
172
185
173
186
func (s * IprotoServer ) read () {
174
187
var err error
175
188
var pp * BinaryPacket
176
189
177
190
r := s .reader
191
+ var wg sync.WaitGroup
178
192
179
193
READER_LOOP:
180
194
for {
@@ -193,8 +207,10 @@ READER_LOOP:
193
207
s .perf .NetPacketsIn .Add (1 )
194
208
}
195
209
210
+ wg .Add (1 )
196
211
go func (pp * BinaryPacket ) {
197
212
packet := & pp .packet
213
+ defer wg .Done ()
198
214
199
215
err := packet .UnmarshalBinary (pp .body )
200
216
@@ -244,6 +260,7 @@ READER_LOOP:
244
260
if err != nil {
245
261
s .setError (err )
246
262
}
263
+ wg .Wait ()
247
264
s .Shutdown ()
248
265
249
266
CLEANUP_LOOP:
You can’t perform that action at this time.
0 commit comments