diff --git a/src/HotChocolate/Fusion/src/Fusion.Execution/Execution/Results/FetchResultStore.cs b/src/HotChocolate/Fusion/src/Fusion.Execution/Execution/Results/FetchResultStore.cs index 69197dca468..19dfbdf594c 100644 --- a/src/HotChocolate/Fusion/src/Fusion.Execution/Execution/Results/FetchResultStore.cs +++ b/src/HotChocolate/Fusion/src/Fusion.Execution/Execution/Results/FetchResultStore.cs @@ -122,40 +122,42 @@ public bool AddPartialResults( lock (_lock) { - if (rootErrors is not null) + try { - _errors ??= []; - _errors.AddRange(rootErrors); - } + if (rootErrors is not null) + { + _errors ??= []; + _errors.AddRange(rootErrors); + } - var resultData = _result.Data; + var resultData = _result.Data; - for (var i = 0; i < results.Length; i++) - { - var result = results[i]; - - if (!SaveSafeResult( - resultData, - result.Path, - result.AdditionalPaths.AsSpan(), - dataElementsSpan[i], - errorTriesSpan[i], - resultSelectionSet)) + for (var i = 0; i < results.Length; i++) { - return false; + var result = results[i]; + + if (!SaveSafeResult( + resultData, + result.Path, + result.AdditionalPaths.AsSpan(), + dataElementsSpan[i], + errorTriesSpan[i], + resultSelectionSet)) + { + return false; + } } + + return true; + } + finally + { + ReturnPathSegments(results); } } - - return true; } finally { - lock (_lock) - { - ReturnPathSegments(results); - } - dataElementsSpan.Clear(); errorTriesSpan.Clear(); ArrayPool.Shared.Return(dataElements); @@ -182,34 +184,36 @@ private bool AddPartialResultsNoErrors( lock (_lock) { - var resultData = _result.Data; - - for (var i = 0; i < results.Length; i++) + try { - var result = results[i]; - - if (!SaveSafeResult( - resultData, - result.Path, - result.AdditionalPaths.AsSpan(), - dataElementsSpan[i], - errorTrie: null, - resultSelectionSet)) + var resultData = _result.Data; + + for (var i = 0; i < results.Length; i++) { - return false; + var result = results[i]; + + if (!SaveSafeResult( + resultData, + result.Path, + result.AdditionalPaths.AsSpan(), + dataElementsSpan[i], + errorTrie: null, + resultSelectionSet)) + { + return false; + } } + + return true; + } + finally + { + ReturnPathSegments(results); } } - - return true; } finally { - lock (_lock) - { - ReturnPathSegments(results); - } - dataElementsSpan.Clear(); ArrayPool.Shared.Return(dataElements); } @@ -226,9 +230,9 @@ private bool AddSinglePartialResult( var dataElement = GetDataElement(sourcePath, result.Data); var errorTrie = GetErrorTrie(sourcePath, errors?.Trie); - try + lock (_lock) { - lock (_lock) + try { if (errors?.RootErrors is { Length: > 0 } rootErrors) { @@ -244,10 +248,7 @@ private bool AddSinglePartialResult( errorTrie, resultSelectionSet); } - } - finally - { - lock (_lock) + finally { ReturnPathSegments(result); } @@ -262,9 +263,9 @@ private bool AddSinglePartialResultNoErrors( _memory.Push(result); var dataElement = GetDataElement(sourcePath, result.Data); - try + lock (_lock) { - lock (_lock) + try { return SaveSafeResult( _result.Data, @@ -274,10 +275,7 @@ private bool AddSinglePartialResultNoErrors( errorTrie: null, resultSelectionSet); } - } - finally - { - lock (_lock) + finally { ReturnPathSegments(result); }