Skip to content
Snippets Groups Projects
Commit 6713f7c2 authored by Jake Taylor's avatar Jake Taylor
Browse files

attempt to fix mutex segfault in HandleReceivedRequest

parent b54fe9e3
No related branches found
No related tags found
3 merge requests!510Release,!365attempt to fix mutex segfault in HandleReceivedRequest,!354Channels impl
...@@ -244,9 +244,8 @@ func (s *Store) HandleReceivedRequest(partner *id.ID, handler func(*ReceivedRequ ...@@ -244,9 +244,8 @@ func (s *Store) HandleReceivedRequest(partner *id.ID, handler func(*ReceivedRequ
s.mux.RLock() s.mux.RLock()
rr, ok := s.receivedByID[*partner] rr, ok := s.receivedByID[*partner]
s.mux.RUnlock()
if !ok { if !ok {
s.mux.RUnlock()
return errors.Errorf("Received request not "+ return errors.Errorf("Received request not "+
"found: %s", partner) "found: %s", partner)
} }
...@@ -255,29 +254,19 @@ func (s *Store) HandleReceivedRequest(partner *id.ID, handler func(*ReceivedRequ ...@@ -255,29 +254,19 @@ func (s *Store) HandleReceivedRequest(partner *id.ID, handler func(*ReceivedRequ
rr.mux.Lock() rr.mux.Lock()
defer rr.mux.Unlock() defer rr.mux.Unlock()
// Check that the request still exists; it could have been deleted while the
// lock was taken
s.mux.RLock()
_, ok = s.receivedByID[*partner]
s.mux.RUnlock() s.mux.RUnlock()
if !ok {
return errors.Errorf("Received request not "+
"found: %s", partner)
}
//run the handler //run the handler
handleErr := handler(rr) handleErr := handler(rr)
if handleErr != nil { if handleErr != nil {
return errors.WithMessage(handleErr, "Received error from handler") return errors.WithMessage(handleErr, "Received error from handler")
} }
delete(s.receivedByID, *partner) delete(s.receivedByID, *partner)
s.save() err := s.save()
rr.delete() rr.delete()
return nil return err
} }
// HandleSentRequest handles the request singly, only a single operator // HandleSentRequest handles the request singly, only a single operator
...@@ -311,16 +300,15 @@ func (s *Store) HandleSentRequest(partner *id.ID, handler func(request *SentRequ ...@@ -311,16 +300,15 @@ func (s *Store) HandleSentRequest(partner *id.ID, handler func(request *SentRequ
//run the handler //run the handler
handleErr := handler(sr) handleErr := handler(sr)
if handleErr != nil { if handleErr != nil {
return errors.WithMessage(handleErr, "Received error from handler") return errors.WithMessage(handleErr, "Received error from handler")
} }
delete(s.sentByID, *partner) delete(s.sentByID, *partner)
s.save() err := s.save()
sr.delete() sr.delete()
return nil return err
} }
// GetReceivedRequest returns the contact representing the partner request // GetReceivedRequest returns the contact representing the partner request
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment