A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/dotnet/corefx/commit/e78caf82ce13b6e1d1359cc239bf0535943cc386 below:

Fixed missing Dispose call on Union on empty enumerable (#40384) · dotnet/corefx@e78caf8 · GitHub

This repository was archived by the owner on Jan 23, 2023. It is now read-only.

File tree Expand file treeCollapse file tree 3 files changed

+37

-1

lines changed

Filter options

Expand file treeCollapse file tree 3 files changed

+37

-1

lines changed Original file line number Diff line number Diff line change

@@ -99,10 +99,11 @@ public sealed override bool MoveNext()

99 99

for (IEnumerable<TSource> enumerable = GetEnumerable(0); enumerable != null; enumerable = GetEnumerable(_state - 1))

100 100

{

101 101

IEnumerator<TSource> enumerator = enumerable.GetEnumerator();

102 +

SetEnumerator(enumerator);

103 + 102 104

++_state;

103 105

if (enumerator.MoveNext())

104 106

{

105 -

SetEnumerator(enumerator);

106 107

StoreFirst();

107 108

return true;

108 109

}

Original file line number Diff line number Diff line change

@@ -345,5 +345,25 @@ public DelegateIterator(

345 345 346 346

void IDisposable.Dispose() => _dispose();

347 347

}

348 + 349 +

protected sealed class DisposeTrackingEnumerable<T> : IEnumerable<T>

350 +

{

351 +

public bool EnumeratorDisposed { get; private set; }

352 + 353 + 354 +

public IEnumerator<T> GetEnumerator() => new Enumerator(this);

355 +

IEnumerator IEnumerable.GetEnumerator() => new Enumerator(this);

356 + 357 +

private sealed class Enumerator : IEnumerator<T>

358 +

{

359 +

private readonly DisposeTrackingEnumerable<T> _enumerable;

360 +

public Enumerator(DisposeTrackingEnumerable<T> enumerable) => _enumerable = enumerable;

361 +

public void Dispose() => _enumerable.EnumeratorDisposed = true;

362 +

public T Current => default;

363 +

object IEnumerator.Current => default;

364 +

public bool MoveNext() => false;

365 +

public void Reset() { }

366 +

}

367 +

}

348 368

}

349 369

}

Original file line number Diff line number Diff line change

@@ -4,6 +4,7 @@

4 4 5 5

using System;

6 6

using System.Collections.Generic;

7 +

using System.Collections;

7 8

using Xunit;

8 9 9 10

namespace System.Linq.Tests

@@ -413,5 +414,19 @@ public void HashSetWithBuiltInComparer_HashSetContainsNotUsed()

413 414

Assert.Equal(new[] { "A", "a" }, input2.Union(input1, EqualityComparer<string>.Default));

414 415

Assert.Equal(new[] { "A" }, input2.Union(input1, StringComparer.OrdinalIgnoreCase));

415 416

}

417 + 418 +

[Fact]

419 +

public void UnionFollowedBySelectOnEmptyEnumerableInvokesDispose()

420 +

{

421 +

var enum1 = new DisposeTrackingEnumerable<int>();

422 +

var enum2 = new DisposeTrackingEnumerable<int>();

423 +

Assert.False(enum1.EnumeratorDisposed);

424 +

Assert.False(enum2.EnumeratorDisposed);

425 + 426 +

foreach (int value in enum1.Union(enum2)) { }

427 + 428 +

Assert.True(enum1.EnumeratorDisposed);

429 +

Assert.True(enum2.EnumeratorDisposed);

430 +

}

416 431

}

417 432

}

You can’t perform that action at this time.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4