dotnet/runtime

Possible thread safety issue with linked cache entries

Open

#46.032 aperta il 14 dic 2020

Vedi su GitHub
 (4 commenti) (2 reazioni) (0 assegnatari)C# (5445 fork)batch import
area-Extensions-Cachingbughelp wanted

Metriche repository

Star
 (17.886 star)
Metriche merge PR
 (Merge medio 12g 11h) (661 PR mergiate in 30 g)

Descrizione

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

Guida contributor