diff options
author | zeripath <art27@cantab.net> | 2021-02-13 19:02:09 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-13 20:02:09 +0100 |
commit | b3c2e23cbbfc6386f0d35e252051f9f74f548f98 (patch) | |
tree | af38d1bb992c1bb34920805f7efb7317b12ff085 /modules | |
parent | 5e4fa7c703726cfc18ce8741a5d829173f3fec5c (diff) | |
download | gitea-b3c2e23cbbfc6386f0d35e252051f9f74f548f98.tar.gz gitea-b3c2e23cbbfc6386f0d35e252051f9f74f548f98.zip |
Prevent race in PersistableChannelUniqueQueue.Has (#14651)
There is potentially a race with a slow starting internal
queue causing a NPE if Has is checked before the internal
queue has been setup.
This PR adds a lock on the Has() fn.
Fix #14311
Signed-off-by: Andrew Thornton <art27@cantab.net>
Diffstat (limited to 'modules')
-rw-r--r-- | modules/queue/unique_queue_disk_channel.go | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/modules/queue/unique_queue_disk_channel.go b/modules/queue/unique_queue_disk_channel.go index 71049f3259..4a69b43eae 100644 --- a/modules/queue/unique_queue_disk_channel.go +++ b/modules/queue/unique_queue_disk_channel.go @@ -149,6 +149,11 @@ func (q *PersistableChannelUniqueQueue) Has(data Data) (bool, error) { if err != nil || has { return has, err } + q.lock.Lock() + defer q.lock.Unlock() + if q.internal == nil { + return false, nil + } return q.internal.(UniqueQueue).Has(data) } |