dotnet/runtime

Possible thread safety issue with linked cache entries

Open

#46,032 opened on 2020年12月14日

GitHub で見る
 (4 comments) (2 reactions) (0 assignees)C# (5,445 forks)batch import
area-Extensions-Cachingbughelp wanted

Repository metrics

Stars
 (17,886 stars)
PR merge metrics
 (平均マージ 12d 11h) (30d で 661 merged PRs)

説明

As noticed by @gfoidl in https://github.com/dotnet/runtime/pull/45962/files#r541573802

It's possible that when the following code responsible for propagating the options to the linked cache entry:

https://github.com/dotnet/runtime/blob/8d6e098d647bd59a79165c3ad6b31957999479bb/src/libraries/Microsoft.Extensions.Caching.Memory/src/CacheEntry.cs#L329-L341

calls the parent.AddExpirationToken method:

https://github.com/dotnet/runtime/blob/1d9e50cb4735df46d3de0cee5791e97295eaf588/src/libraries/Microsoft.Extensions.Caching.Abstractions/src/CacheEntryExtensions.cs#L40

is using _expirationTokens which might be used without a lock in the CheckForExpiredTokens method at the same time

https://github.com/dotnet/runtime/blob/8d6e098d647bd59a79165c3ad6b31957999479bb/src/libraries/Microsoft.Extensions.Caching.Memory/src/CacheEntry.cs#L207-L229

Adding a lock to CheckForExpiredTokens would be trivial, but it would hurt the perf...

コントリビューターガイド