@@ -40,29 +40,24 @@ template <typename AsyncReadRequest>
4040SC::AsyncRequestReadableStream<AsyncReadRequest>::AsyncRequestReadableStream()
4141{
4242 AsyncReadableStream::asyncRead.bind <AsyncRequestReadableStream, &AsyncRequestReadableStream::read>(*this );
43+ (void )AsyncReadableStream::eventClose
44+ .addListener <AsyncRequestReadableStream, &AsyncRequestReadableStream::onCloseStopRequest>(*this );
4345}
4446
4547template <typename AsyncReadRequest>
46- void SC::AsyncRequestReadableStream<AsyncReadRequest>::onEndCloseDescriptor ()
48+ void SC::AsyncRequestReadableStream<AsyncReadRequest>::onCloseStopRequest ()
4749{
48- Result res = Internal::closeDescriptor (request);
49- if (not res)
50+ if (not request.isFree ())
5051 {
51- emitError (res );
52+ request. stop (*eventLoop );
5253 }
53- }
54-
55- template <typename AsyncReadRequest>
56- SC::Result SC::AsyncRequestReadableStream<AsyncReadRequest>::registerAutoCloseDescriptor(bool value)
57- {
58- using Self = AsyncRequestReadableStream;
59- if (value)
60- {
61- return Result (eventEnd.addListener <Self, &Self::onEndCloseDescriptor>(*this ));
62- }
63- else
54+ if (autoCloseDescriptor)
6455 {
65- return Result (eventEnd.removeListener <Self, &Self::onEndCloseDescriptor>(*this ));
56+ Result res = Internal::closeDescriptor (request);
57+ if (not res)
58+ {
59+ emitError (res);
60+ }
6661 }
6762}
6863
@@ -89,10 +84,10 @@ template <typename AsyncReadRequest>
8984void SC::AsyncRequestReadableStream<AsyncReadRequest>::afterRead(typename AsyncReadRequest::Result& result,
9085 AsyncBufferView::ID bufferID)
9186{
92- SC_ASSERT_RELEASE (request.isFree ());
9387 Span<char > data;
9488 if (result.get (data))
9589 {
90+ SC_ASSERT_RELEASE (request.isFree ());
9691 if (Internal::isEnded (result))
9792 {
9893 getBuffersPool ().unrefBuffer (bufferID);
@@ -157,29 +152,24 @@ template <typename AsyncWriteRequest>
157152SC::AsyncRequestWritableStream<AsyncWriteRequest>::AsyncRequestWritableStream()
158153{
159154 AsyncWritableStream::asyncWrite.bind <AsyncRequestWritableStream, &AsyncRequestWritableStream::write>(*this );
155+ (void )AsyncWritableStream::eventFinish
156+ .addListener <AsyncRequestWritableStream, &AsyncRequestWritableStream::onFinishStopRequest>(*this );
160157}
161158
162159template <typename AsyncWriteRequest>
163- void SC::AsyncRequestWritableStream<AsyncWriteRequest>::onEndCloseDescriptor ()
160+ void SC::AsyncRequestWritableStream<AsyncWriteRequest>::onFinishStopRequest ()
164161{
165- Result res = Internal::closeDescriptor (request);
166- if (not res)
162+ if (not request.isFree ())
167163 {
168- emitError (res );
164+ request. stop (*eventLoop );
169165 }
170- }
171-
172- template <typename AsyncWriteRequest>
173- SC::Result SC::AsyncRequestWritableStream<AsyncWriteRequest>::registerAutoCloseDescriptor(bool value)
174- {
175- using Self = AsyncRequestWritableStream;
176- if (value)
166+ if (autoCloseDescriptor)
177167 {
178- return Result (eventFinish. addListener <Self, &Self::onEndCloseDescriptor>(* this ) );
179- }
180- else
181- {
182- return Result (eventFinish. removeListener <Self, &Self::onEndCloseDescriptor>(* this ));
168+ Result res = Internal::closeDescriptor (request );
169+ if ( not res)
170+ {
171+ emitError (res);
172+ }
183173 }
184174}
185175
0 commit comments