aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzeripath <art27@cantab.net>2021-02-13 19:02:09 +0000
committerGitHub <noreply@github.com>2021-02-13 20:02:09 +0100
commitb3c2e23cbbfc6386f0d35e252051f9f74f548f98 (patch)
treeaf38d1bb992c1bb34920805f7efb7317b12ff085
parent5e4fa7c703726cfc18ce8741a5d829173f3fec5c (diff)
downloadgitea-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>
-rw-r--r--modules/queue/unique_queue_disk_channel.go5
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)
}