From 69aa784d3215d062a27852af412dbc8c47906d1d 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 71098d8c..296243be 100644 --- a/internal/user/events.go +++ b/internal/user/events.go @@ -257,7 +257,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 5fbdb54b..c2634f0a 100644 --- a/internal/user/user.go +++ b/internal/user/user.go @@ -546,7 +546,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() }