Intel® oneAPI Threading Building Blocks
Ask questions and share information about adding parallelism to your applications when using this threading library.
Announcements
This community is designed for sharing of public information. Please do not share Intel or third-party confidential information here.

TBB task allocation assertion

foxcub
Beginner
123 Views

I'm trying to traverse a tree via TBB tasks and continuations. The code is below. When I run the code it keeps aborting (frequently, although not always) with the following error:

Assertion t_next->state()==task::allocated failed on line 334 of file ../../src/tbb/custom_scheduler.h Detailed description: if task::execute() returns task, it must be marked as allocated

What can be causing this problem?

template
void
traverse_tree(NodeVisitor& nv)
{
TreeTraversal& tt = *(new(task::allocate_root()) TreeTraversal(nv));
task::spawn_root_and_wait(tt);
}

template
class TreeTraversal: public task
{
public:
struct Continuation;

public:
TreeTraversal(NodeVisitor nv_):
nv(nv_) {}

task* execute()
{
nv.pre();

Continuation* c = new(allocate_continuation()) Continuation(nv);
c->set_ref_count(nv.size());
for (size_t i = 0; i < nv.size(); ++i)
{
TreeTraversal& tt = *(new(c->allocate_child()) TreeTraversal(nv.child(i)));
spawn(tt);
}

if (!nv.size())
return c;

return NULL;
}

private:
NodeVisitor nv;
};

template
class TreeTraversal::Continuation: public task
{
public:
Continuation(NodeVisitor& nv_):
nv(nv_) {}
task* execute() { nv.post(); return NULL; }

private:
NodeVisitor nv;
};

0 Kudos
1 Reply
foxcub
Beginner
123 Views
Alexey Kukanov has solved the problem on StackOverflow.
Reply