@@ -1173,7 +1173,38 @@ extension NIOAsyncWriter {
11731173 delegate: delegate
11741174 )
11751175
1176- case . initial, . finished, . writerFinished:
1176+ case . writerFinished(
1177+ let isWritable,
1178+ let inDelegateOutcall,
1179+ var suspendedYields,
1180+ let cancelledYields,
1181+ let bufferedYieldIDs,
1182+ let delegate,
1183+ let error
1184+ ) :
1185+ // We have a suspended yield at this point that hasn't been cancelled yet.
1186+ // It was buffered before we became finished, so we still have to deliver it.
1187+ // We need to store the yield now.
1188+
1189+ self . _state = . modifying
1190+
1191+ let suspendedYield = SuspendedYield (
1192+ yieldID: yieldID,
1193+ continuation: continuation
1194+ )
1195+ suspendedYields. append ( suspendedYield)
1196+
1197+ self . _state = . writerFinished(
1198+ isWritable: isWritable,
1199+ inDelegateOutcall: inDelegateOutcall,
1200+ suspendedYields: suspendedYields,
1201+ cancelledYields: cancelledYields,
1202+ bufferedYieldIDs: bufferedYieldIDs,
1203+ delegate: delegate,
1204+ error: error
1205+ )
1206+
1207+ case . initial, . finished:
11771208 preconditionFailure ( " This should have already been handled by `yield()` " )
11781209
11791210 case . modifying:
@@ -1501,7 +1532,7 @@ extension NIOAsyncWriter {
15011532
15021533 self . _state = . writerFinished(
15031534 isWritable: isWritable,
1504- inDelegateOutcall: inDelegateOutcall ,
1535+ inDelegateOutcall: false ,
15051536 suspendedYields: . init( ) ,
15061537 cancelledYields: cancelledYields,
15071538 bufferedYieldIDs: bufferedYieldIDs,
0 commit comments