fix: various locks in the signaler
This commit is contained in:
@@ -130,6 +130,7 @@ func (s *Server) CreateAuthToken(ctx context.Context, request *connect.Request[p
|
||||
return nil, fmt.Errorf("error creating UUID: %v", err)
|
||||
}
|
||||
id = myUUID.String()
|
||||
s.mu.Unlock()
|
||||
}
|
||||
|
||||
token := &internalpb.AuthToken{
|
||||
@@ -169,7 +170,6 @@ func (s *Server) ListCameras(ctx context.Context, request *connect.Request[pb.Li
|
||||
// Optionally, wait_for_update can be set to prevent returning until the Camera has seen the
|
||||
// session request, populated candidates, and returned a session offer.
|
||||
func (s *Server) CreateSession(ctx context.Context, request *connect.Request[pb.CreateSessionRequest]) (*connect.Response[pb.Session], error) {
|
||||
|
||||
log.Printf("Creating session")
|
||||
defer log.Printf("Done session")
|
||||
thisSession := request.Msg.Session
|
||||
@@ -224,14 +224,14 @@ func (s *Server) PopSession(ctx context.Context, request *connect.Request[pb.Pop
|
||||
s.mu.Unlock()
|
||||
|
||||
var sess *session
|
||||
tick := time.NewTicker(time.Second * 30)
|
||||
tick := time.NewTicker(time.Second * 20)
|
||||
defer tick.Stop()
|
||||
select {
|
||||
case sess = <-ch:
|
||||
// OK
|
||||
case <-tick.C:
|
||||
// have them retry
|
||||
return nil, connect.NewError(connect.CodeDeadlineExceeded, fmt.Errorf("try again"))
|
||||
return connect.NewResponse(&pb.Session{}), nil
|
||||
}
|
||||
|
||||
if sess == nil {
|
||||
@@ -253,17 +253,19 @@ func (s *Server) CreateIceMessage(ctx context.Context, request *connect.Request[
|
||||
req := request.Msg
|
||||
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
|
||||
session, ok := s.sessionsById[req.GetSessionIdentifier().GetId()]
|
||||
if !ok {
|
||||
s.mu.Unlock()
|
||||
return nil, status.Errorf(codes.NotFound, "unknown session")
|
||||
}
|
||||
|
||||
if _, ok := s.camerasByHome[authToken.Home]; !ok {
|
||||
s.mu.Unlock()
|
||||
return nil, status.Errorf(codes.NotFound, "home %q not found", authToken.Home)
|
||||
}
|
||||
_, isCamera := s.camerasByHome[authToken.Home][authToken.Uid]
|
||||
s.mu.Unlock()
|
||||
|
||||
session.createTime = time.Now()
|
||||
msg := req.GetIceMessage()
|
||||
|
||||
Reference in New Issue
Block a user