@@ -126,6 +126,8 @@ func (disc *Client) jsonDecodeLoop(in io.Reader, outChan chan<- *discoveryMessag
126
126
disc .statusMutex .Lock ()
127
127
disc .incomingMessagesError = err
128
128
disc .statusMutex .Unlock ()
129
+ disc .stopSync ()
130
+ disc .killProcess ()
129
131
close (outChan )
130
132
if err != nil {
131
133
disc .logger .Errorf ("stopped discovery %s decode loop: %v" , disc , err )
@@ -171,6 +173,13 @@ func (disc *Client) jsonDecodeLoop(in io.Reader, outChan chan<- *discoveryMessag
171
173
}
172
174
}
173
175
176
+ // Alive returns true if the discovery is running and false otherwise.
177
+ func (disc * Client ) Alive () bool {
178
+ disc .statusMutex .Lock ()
179
+ defer disc .statusMutex .Unlock ()
180
+ return disc .process != nil
181
+ }
182
+
174
183
func (disc * Client ) waitMessage (timeout time.Duration ) (* discoveryMessage , error ) {
175
184
select {
176
185
case msg := <- disc .incomingMessagesChan :
@@ -230,6 +239,9 @@ func (disc *Client) runProcess() error {
230
239
}
231
240
232
241
func (disc * Client ) killProcess () error {
242
+ disc .statusMutex .Lock ()
243
+ defer disc .statusMutex .Unlock ()
244
+
233
245
disc .logger .Infof ("killing discovery %s process" , disc )
234
246
if disc .process != nil {
235
247
if err := disc .process .Kill (); err != nil {
@@ -238,10 +250,8 @@ func (disc *Client) killProcess() error {
238
250
if err := disc .process .Wait (); err != nil {
239
251
return err
240
252
}
253
+ disc .process = nil
241
254
}
242
- disc .statusMutex .Lock ()
243
- defer disc .statusMutex .Unlock ()
244
- disc .stopSync ()
245
255
disc .logger .Infof ("killed discovery %s process" , disc )
246
256
return nil
247
257
}
0 commit comments