From 6b1dd1ed4ca43eeab433823e15d0960ce7a1a128 Mon Sep 17 00:00:00 2001 From: Joachim Bauch Date: Fri, 13 May 2022 16:24:18 +0200 Subject: [PATCH] Improve locking and allow concurrent reading. --- roomsessions_builtin.go | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/roomsessions_builtin.go b/roomsessions_builtin.go index 54028a6..7b65947 100644 --- a/roomsessions_builtin.go +++ b/roomsessions_builtin.go @@ -28,7 +28,7 @@ import ( type BuiltinRoomSessions struct { sessionIdToRoomSession map[string]string roomSessionToSessionid map[string]string - mu sync.Mutex + mu sync.RWMutex } func NewBuiltinRoomSessions() (RoomSessions, error) { @@ -44,9 +44,10 @@ func (r *BuiltinRoomSessions) SetRoomSession(session Session, roomSessionId stri return nil } - r.mu.Lock() - defer r.mu.Unlock() if sid := session.PublicId(); sid != "" { + r.mu.Lock() + defer r.mu.Unlock() + r.sessionIdToRoomSession[sid] = roomSessionId r.roomSessionToSessionid[roomSessionId] = sid } @@ -54,9 +55,10 @@ func (r *BuiltinRoomSessions) SetRoomSession(session Session, roomSessionId stri } func (r *BuiltinRoomSessions) DeleteRoomSession(session Session) { - r.mu.Lock() - defer r.mu.Unlock() if sid := session.PublicId(); sid != "" { + r.mu.Lock() + defer r.mu.Unlock() + if roomSessionId, found := r.sessionIdToRoomSession[sid]; found { delete(r.sessionIdToRoomSession, sid) if r.roomSessionToSessionid[roomSessionId] == sid { @@ -67,8 +69,8 @@ func (r *BuiltinRoomSessions) DeleteRoomSession(session Session) { } func (r *BuiltinRoomSessions) GetSessionId(roomSessionId string) (string, error) { - r.mu.Lock() - defer r.mu.Unlock() + r.mu.RLock() + defer r.mu.RUnlock() sid, found := r.roomSessionToSessionid[roomSessionId] if !found { return "", ErrNoSuchRoomSession