uvco 0.1
Loading...
Searching...
No Matches
uvco::StreamBase::ShutdownAwaiter_ Struct Reference

Public Member Functions

 ShutdownAwaiter_ ()=default
bool await_ready ()
bool await_suspend (std::coroutine_handle<> handle)
void await_resume ()

Static Public Member Functions

static void onShutdown (uv_shutdown_t *req, uv_status status)

Public Attributes

std::coroutine_handle handle_
std::optional< uv_statusstatus_

Constructor & Destructor Documentation

◆ ShutdownAwaiter_()

uvco::StreamBase::ShutdownAwaiter_::ShutdownAwaiter_ ( )
default

Member Function Documentation

◆ await_ready()

bool uvco::StreamBase::ShutdownAwaiter_::await_ready ( )
330{ return false; }

◆ await_resume()

void uvco::StreamBase::ShutdownAwaiter_::await_resume ( )
339 {
340 BOOST_ASSERT(status_);
341 if (status_ && status_.value() != 0) {
342 throw UvcoException{*status_, "StreamBase::shutdown() encountered error"};
343 }
344}
std::optional< uv_status > status_
Definition stream.cc:39

◆ await_suspend()

bool uvco::StreamBase::ShutdownAwaiter_::await_suspend ( std::coroutine_handle<> handle)
333 {
334 BOOST_ASSERT(!handle_);
335 handle_ = handle;
336 return true;
337}
std::coroutine_handle handle_
Definition stream.cc:38

◆ onShutdown()

void uvco::StreamBase::ShutdownAwaiter_::onShutdown ( uv_shutdown_t * req,
uv_status status )
static
347 {
348 const std::unique_ptr<uv_shutdown_t> uniqueReq{req};
349 auto *awaiter = getRequestDataOrNull<ShutdownAwaiter_>(uniqueReq.get());
350 if (awaiter == nullptr) {
351 // shutdown coroutine was ancelled.
352 return;
353 }
354 awaiter->status_ = status;
355 if (awaiter->handle_) {
356 Loop::enqueue(awaiter->handle_);
357 awaiter->handle_ = nullptr;
358 }
359}
static void enqueue(std::coroutine_handle<> handle)
Definition loop.cc:94
Into * getRequestDataOrNull(const Request *req)
Definition internal_utils.h:69

Member Data Documentation

◆ handle_

std::coroutine_handle uvco::StreamBase::ShutdownAwaiter_::handle_

◆ status_

std::optional<uv_status> uvco::StreamBase::ShutdownAwaiter_::status_

The documentation for this struct was generated from the following file: