You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
First thanks for the awesome library.
I have a question regarding lifecycle of cppcoro::task<> object.
Imagine a scenario where a function is producing a task, and launching them in a thread pool:
cppcoro::task<void> do_something_on_threadpool(cppcoro::static_thread_pool& tp)
{
// First schedule the coroutine onto the threadpool.
co_await tp.schedule();
// When it resumes, this coroutine is now running on the threadpool.
do_something();
}
// executing in MainThread
void producer(cppcoro::static_thread_pool& tp)
{
cppcoro::task<void> task0 = do_something_on_threadpool(tp);
// wait for the tasks
co_await task0;
}
In this case, lets assume for task0, we enter final_suspend from some other thread T0, and reach final_awaiter. This would mean the coroutine .done() will return true,
Now lets say we are in MainThread, and try to execute co_await task0;
So now, if I want to set producer() as the continuation in co_await, await_ready() will return true, and the continuation will not be set. Lets say this happens, and we return from the function i.e. we exit the scope of cppcoro::task and the task coroutine gets destroyed.
Now lets say, thread T0 starts working on final_suspend(...), it will try to access the task state that was already destroyed in MainThread resulting in SEGFAULT.
Please correct me if I am wrong about this.
Thanks,
obhi
The text was updated successfully, but these errors were encountered:
Hello,
First thanks for the awesome library.
I have a question regarding lifecycle of cppcoro::task<> object.
Imagine a scenario where a function is producing a task, and launching them in a thread pool:
In this case, lets assume for task0, we enter final_suspend from some other thread T0, and reach final_awaiter. This would mean the coroutine .done() will return true,
Now lets say we are in MainThread, and try to execute co_await task0;
So now, if I want to set producer() as the continuation in co_await, await_ready() will return true, and the continuation will not be set. Lets say this happens, and we return from the function i.e. we exit the scope of cppcoro::task and the task coroutine gets destroyed.
Now lets say, thread T0 starts working on final_suspend(...), it will try to access the task state that was already destroyed in MainThread resulting in SEGFAULT.
Please correct me if I am wrong about this.
Thanks,
obhi
The text was updated successfully, but these errors were encountered: