Proper router stopping. Printable router status.
This commit is contained in:
parent
cb3052ce04
commit
96f9ce1bd3
@ -431,12 +431,19 @@ func (r *router) watchErrors() {
|
|||||||
if r.status.Code != Stopped {
|
if r.status.Code != Stopped {
|
||||||
// notify all goroutines to finish
|
// notify all goroutines to finish
|
||||||
close(r.exit)
|
close(r.exit)
|
||||||
// drain the advertise channel
|
|
||||||
for range r.advertChan {
|
// drain the advertise channel only if advertising
|
||||||
}
|
if r.status.Code == Advertising {
|
||||||
// drain the event channel
|
// drain the advertise channel
|
||||||
for range r.eventChan {
|
for range r.advertChan {
|
||||||
|
}
|
||||||
|
// drain the event channel
|
||||||
|
for range r.eventChan {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// mark the router as Stopped and set its Error to nil
|
||||||
|
r.status = Status{Code: Stopped, Error: nil}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -615,11 +622,15 @@ func (r *router) Stop() error {
|
|||||||
if r.status.Code == Running || r.status.Code == Advertising {
|
if r.status.Code == Running || r.status.Code == Advertising {
|
||||||
// notify all goroutines to finish
|
// notify all goroutines to finish
|
||||||
close(r.exit)
|
close(r.exit)
|
||||||
// drain the advertise channel
|
|
||||||
for range r.advertChan {
|
// drain the advertise channel only if advertising
|
||||||
}
|
if r.status.Code == Advertising {
|
||||||
// drain the event channel
|
// drain the advertise channel
|
||||||
for range r.eventChan {
|
for range r.advertChan {
|
||||||
|
}
|
||||||
|
// drain the event channel
|
||||||
|
for range r.eventChan {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// mark the router as Stopped and set its Error to nil
|
// mark the router as Stopped and set its Error to nil
|
||||||
|
@ -59,6 +59,21 @@ const (
|
|||||||
Error
|
Error
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func (s StatusCode) String() string {
|
||||||
|
switch s {
|
||||||
|
case Running:
|
||||||
|
return "running"
|
||||||
|
case Advertising:
|
||||||
|
return "advertising"
|
||||||
|
case Stopped:
|
||||||
|
return "stopped"
|
||||||
|
case Error:
|
||||||
|
return "error"
|
||||||
|
default:
|
||||||
|
return "unknown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Status is router status
|
// Status is router status
|
||||||
type Status struct {
|
type Status struct {
|
||||||
// Error is router error
|
// Error is router error
|
||||||
|
Loading…
x
Reference in New Issue
Block a user