1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- #include "impl.h"
- #include "trampoline.h"
- #include "stack/stack_allocator.h"
- #include <util/system/info.h>
- #include <util/system/protect.h>
- #include <util/system/valgrind.h>
- #include <util/system/yassert.h>
- #include <cstdlib>
- #include <util/stream/format.h>
- namespace NCoro {
- TTrampoline::TTrampoline(NStack::IAllocator& allocator, ui32 stackSize, TFunc f, TCont* cont) noexcept
- : Stack_(allocator, stackSize, cont->Name())
- , Clo_{this, Stack_.Get(), cont->Name()}
- , Ctx_(Clo_)
- , Func_(std::move(f))
- , Cont_(cont)
- {}
- void TTrampoline::DoRun() {
- if (Cont_->Executor()->FailOnError()) {
- Func_(Cont_);
- } else {
- try {
- Func_(Cont_);
- } catch (...) {}
- }
- Cont_->Terminate();
- }
- TArrayRef<char> TTrampoline::Stack() noexcept {
- return Stack_.Get();
- }
- const char* TTrampoline::ContName() const noexcept {
- return Cont_->Name();
- }
- void TTrampoline::DoRunNaked() {
- DoRun();
- abort();
- }
- }
|