dotnet/runtime

Possible thread safety issue with linked cache entries

Open

#46.032 geöffnet am 14. Dez. 2020

Auf GitHub ansehen
 (4 Kommentare) (2 Reaktionen) (0 zugewiesene Personen)C# (5.445 Forks)batch import
area-Extensions-Cachingbughelp wanted

Repository-Metriken

Stars
 (17.886 Stars)
PR-Merge-Metriken
 (Durchschn. Merge 12T 11h) (661 gemergte PRs in 30 T)

Beschreibung

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...

Contributor Guide