Skip to content

Commit

Permalink
Enable to signal a maximum number of condtional.
Browse files Browse the repository at this point in the history
  • Loading branch information
Barenboim committed Jun 24, 2023
1 parent ad2aee3 commit 0233d44
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 5 deletions.
13 changes: 9 additions & 4 deletions src/factory/WFTaskFactory.cc
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,7 @@ static class __ConditionalMap

WFConditional *create(const std::string& name, SubTask *task);

void signal(const std::string& name, void *msg);
void signal(const std::string& name, void *msg, size_t max);
void signal(struct __ConditionalList *conds,
struct __conditional_node *node,
void *msg);
Expand Down Expand Up @@ -451,7 +451,7 @@ struct __ConditionalList *__ConditionalMap::get_list(const std::string& name)
return conds;
}

void __ConditionalMap::signal(const std::string& name, void *msg)
void __ConditionalMap::signal(const std::string& name, void *msg, size_t max)
{
struct __ConditionalList *conds;
struct rb_node *p;
Expand Down Expand Up @@ -482,8 +482,12 @@ void __ConditionalMap::signal(const std::string& name, void *msg)

list_for_each_safe(pos, tmp, &conds->head)
{
if (max == 0)
return;

node = list_entry(pos, struct __conditional_node, list);
node->cond->WFConditional::signal(msg);
max--;
}

delete conds;
Expand Down Expand Up @@ -531,9 +535,10 @@ WFConditional *WFTaskFactory::create_conditional(const std::string& cond_name,
return __conditional_map.create(cond_name, task);
}

void WFTaskFactory::signal_by_name(const std::string& cond_name, void *msg)
void WFTaskFactory::signal_by_name(const std::string& cond_name, void *msg,
size_t max)
{
__conditional_map.signal(cond_name, msg);
__conditional_map.signal(cond_name, msg, max);
}

/**************** Timed Go Task *****************/
Expand Down
8 changes: 7 additions & 1 deletion src/factory/WFTaskFactory.h
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,13 @@ class WFTaskFactory
static WFConditional *create_conditional(const std::string& cond_name,
SubTask *task);

static void signal_by_name(const std::string& cond_name, void *msg);
static void signal_by_name(const std::string& cond_name, void *msg)
{
WFTaskFactory::signal_by_name(cond_name, msg, (size_t)-1);
}

static void signal_by_name(const std::string& cond_name, void *msg,
size_t max);

public:
template<class FUNC, class... ARGS>
Expand Down

0 comments on commit 0233d44

Please sign in to comment.