Commit 8092e181 authored by Max Kellermann's avatar Max Kellermann

input/async: add attribute "postponed_exception"

Will replace "postponed_error".
parent 6ed77f2a
......@@ -88,6 +88,12 @@ AsyncInputStream::Resume()
bool
AsyncInputStream::Check(Error &error)
{
if (postponed_exception) {
auto e = std::move(postponed_exception);
postponed_exception = std::exception_ptr();
std::rethrow_exception(e);
}
bool success = !postponed_error.IsDefined();
if (!success) {
error = std::move(postponed_error);
......@@ -181,6 +187,7 @@ bool
AsyncInputStream::IsAvailable()
{
return postponed_error.IsDefined() ||
postponed_exception ||
IsEOF() ||
!buffer.IsEmpty();
}
......
......@@ -26,6 +26,8 @@
#include "util/CircularBuffer.hxx"
#include "util/Error.hxx"
#include <exception>
/**
* Helper class for moving asynchronous (non-blocking) InputStream
* implementations to the I/O thread. Data is being read into a ring
......@@ -67,6 +69,8 @@ class AsyncInputStream : public InputStream {
protected:
Error postponed_error;
std::exception_ptr postponed_exception;
public:
/**
* @param _buffer a buffer allocated with HugeAllocate(); the
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment