From 825031e05253c3605e77e89c1225879f0144be99 Mon Sep 17 00:00:00 2001 From: Leander Beernaert Date: Wed, 1 Mar 2023 11:10:34 +0100 Subject: [PATCH] fix(GODT-2426): Fix crash on user delete Ensure we are always acquiring a write lock when modifying the user's `updateCh` contents. --- internal/user/events.go | 2 +- internal/user/user.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/user/events.go b/internal/user/events.go index b6a9349d..03172cbd 100644 --- a/internal/user/events.go +++ b/internal/user/events.go @@ -312,7 +312,7 @@ func (user *User) handleUpdateAddressEvent(_ context.Context, event proton.Addre } return nil - }, user.apiAddrsLock) + }, user.apiAddrsLock, user.updateChLock) } func (user *User) handleDeleteAddressEvent(_ context.Context, event proton.AddressEvent) error { diff --git a/internal/user/user.go b/internal/user/user.go index 64d0fdd0..1c163a66 100644 --- a/internal/user/user.go +++ b/internal/user/user.go @@ -553,7 +553,7 @@ func (user *User) Close() { user.client.Close() // Close the user's update channels. - safe.RLock(func() { + safe.Lock(func() { for _, updateCh := range xslices.Unique(maps.Values(user.updateCh)) { updateCh.CloseAndDiscardQueued() }