Skip to content

Commit abdd618

Browse files
committed
Safety check on reader workers and remove writer from dictionary.
1 parent 0efc559 commit abdd618

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

src/ImageSharp.Web/Middleware/ImageSharpMiddleware.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,12 @@ await WriteWorkers.GetOrAdd(
277277
{
278278
try
279279
{
280+
// Prevent a second request from starting a read during write execution.
281+
if (ReadWorkers.TryGetValue(key, out var readWork))
282+
{
283+
await readWork.Value;
284+
}
285+
280286
ImageCacheMetadata cachedImageMetadata = default;
281287
outStream = new RecyclableMemoryStream(this.options.MemoryStreamManager);
282288
IImageFormat format;
@@ -350,6 +356,7 @@ await WriteWorkers.GetOrAdd(
350356
finally
351357
{
352358
await this.StreamDisposeAsync(outStream);
359+
WriteWorkers.TryRemove(key, out var _);
353360
}
354361
}, LazyThreadSafetyMode.ExecutionAndPublication)).Value;
355362
}

0 commit comments

Comments
 (0)