From 1375f428697e56d52b55d23aaa56cc4ab7463853 Mon Sep 17 00:00:00 2001 From: James Houlahan Date: Tue, 22 Nov 2022 14:52:01 +0100 Subject: [PATCH] Other: Clean up gRPC shutdown goroutine --- internal/frontend/grpc/service.go | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/internal/frontend/grpc/service.go b/internal/frontend/grpc/service.go index 6c4c4a80..08d3ef0d 100644 --- a/internal/frontend/grpc/service.go +++ b/internal/frontend/grpc/service.go @@ -197,13 +197,20 @@ func (s *Service) Loop() error { s.log.Info("Starting gRPC server") + doneCh := make(chan struct{}) + defer close(doneCh) + go func() { - <-s.quitCh + select { + case <-s.quitCh: + s.log.Info("Stopping gRPC server") + defer s.log.Info("Stopped gRPC server") - s.log.Info("Stopping gRPC server") - defer s.log.Info("Stopped gRPC server") + s.grpcServer.Stop() - s.grpcServer.Stop() + case <-doneCh: + // ... + } }() if err := s.grpcServer.Serve(s.listener); err != nil { @@ -279,14 +286,12 @@ func (s *Service) watchEvents() { _ = s.SendEvent(NewUserChangedEvent(event.UserID)) case events.UserDeauth: - if user, err := s.bridge.GetUserInfo(event.UserID); err != nil { - s.log.WithError(err).Error("Failed to get user info") - } else { - // The GUI doesn't care about this event... not sure why we still emit it. - _ = s.SendEvent(NewUserDisconnectedEvent(user.Username)) + // This is the event the GUI cares about. + _ = s.SendEvent(NewUserChangedEvent(event.UserID)) - // This is the event the GUI cares about. - _ = s.SendEvent(NewUserChangedEvent(user.UserID)) + // The GUI doesn't care about this event... not sure why we still emit it. + if user, err := s.bridge.GetUserInfo(event.UserID); err == nil { + _ = s.SendEvent(NewUserDisconnectedEvent(user.Username)) } case events.UpdateLatest: