diff --git a/src/BiDaFlow.AsyncEnumerable/Internal/SourceBlockAsyncEnumerable.cs b/src/BiDaFlow.AsyncEnumerable/Internal/SourceBlockAsyncEnumerable.cs index 75a22e1..1828aa9 100644 --- a/src/BiDaFlow.AsyncEnumerable/Internal/SourceBlockAsyncEnumerable.cs +++ b/src/BiDaFlow.AsyncEnumerable/Internal/SourceBlockAsyncEnumerable.cs @@ -107,7 +107,7 @@ public ValueTask DisposeAsync() Task IDataflowBlock.Completion => throw new NotImplementedException(); - DataflowMessageStatus ITargetBlock.OfferMessage(DataflowMessageHeader messageHeader, T messageValue, ISourceBlock source, bool consumeToAccept) + DataflowMessageStatus ITargetBlock.OfferMessage(DataflowMessageHeader messageHeader, T messageValue, ISourceBlock? source, bool consumeToAccept) { if (source != null && source != this._source) throw new ArgumentException("Unexpected source."); if (!messageHeader.IsValid) throw new ArgumentException("messageHeader is not valid."); diff --git a/src/BiDaFlow/Blocks/EncapsulatingPropagatorBlock.cs b/src/BiDaFlow/Blocks/EncapsulatingPropagatorBlock.cs index 0b7a716..8642d63 100644 --- a/src/BiDaFlow/Blocks/EncapsulatingPropagatorBlock.cs +++ b/src/BiDaFlow/Blocks/EncapsulatingPropagatorBlock.cs @@ -35,8 +35,8 @@ public void ReleaseReservation(DataflowMessageHeader messageHeader, ITargetBlock public bool ReserveMessage(DataflowMessageHeader messageHeader, ITargetBlock target) => this._terminal.ReserveMessage(messageHeader, target); - public DataflowMessageStatus OfferMessage(DataflowMessageHeader messageHeader, TInput messageValue, ISourceBlock source, bool consumeToAccept) - => this._entrance.OfferMessage(messageHeader, messageValue, new ProxySourceBlock(this, source), consumeToAccept); + public DataflowMessageStatus OfferMessage(DataflowMessageHeader messageHeader, TInput messageValue, ISourceBlock? source, bool consumeToAccept) + => this._entrance.OfferMessage(messageHeader, messageValue, source != null ? new ProxySourceBlock(this, source) : null, consumeToAccept); public bool TryReceive(Predicate? filter, out TOutput item) { diff --git a/src/BiDaFlow/Blocks/EncapsulatingTargetBlock.cs b/src/BiDaFlow/Blocks/EncapsulatingTargetBlock.cs index a79dae9..be510c8 100644 --- a/src/BiDaFlow/Blocks/EncapsulatingTargetBlock.cs +++ b/src/BiDaFlow/Blocks/EncapsulatingTargetBlock.cs @@ -21,7 +21,7 @@ public EncapsulatingTargetBlock(ITargetBlock entrance, IDataflowBlock termina public void Fault(Exception exception) => this._entrance.Fault(exception); - public DataflowMessageStatus OfferMessage(DataflowMessageHeader messageHeader, T messageValue, ISourceBlock source, bool consumeToAccept) - => this._entrance.OfferMessage(messageHeader, messageValue, new ProxySourceBlock(this, source), consumeToAccept); + public DataflowMessageStatus OfferMessage(DataflowMessageHeader messageHeader, T messageValue, ISourceBlock? source, bool consumeToAccept) + => this._entrance.OfferMessage(messageHeader, messageValue, source != null ? new ProxySourceBlock(this, source) : null, consumeToAccept); } } diff --git a/src/BiDaFlow/Blocks/ProxySourceBlock.cs b/src/BiDaFlow/Blocks/ProxySourceBlock.cs index 8c148b5..4488062 100644 --- a/src/BiDaFlow/Blocks/ProxySourceBlock.cs +++ b/src/BiDaFlow/Blocks/ProxySourceBlock.cs @@ -17,6 +17,9 @@ internal sealed class ProxySourceBlock : ISourceBlock public ProxySourceBlock(ITargetBlock targetWrapper, ISourceBlock source) { + if (targetWrapper == null) throw new ArgumentNullException(nameof(targetWrapper)); + if (source == null) throw new ArgumentNullException(nameof(source)); + this._targetWrapper = targetWrapper; this._source = source; } diff --git a/src/BiDaFlow/CHANGELOG.md b/src/BiDaFlow/CHANGELOG.md index e77e320..4589eb3 100644 --- a/src/BiDaFlow/CHANGELOG.md +++ b/src/BiDaFlow/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased +### Fixed +- Fix wrong null handling in the classes encapsulating `ITargetBlock` + ## [0.2.0-alpha1] - 2020-10-13 ### Added - Add simple encapulation methods