diff --git a/src/cell.c b/src/cell.c index 95e323307ab602dd1eb4c8e8c78f662295409ee1..22feeca040750ac93e24a01a878cad3e334cc649 100644 --- a/src/cell.c +++ b/src/cell.c @@ -3574,20 +3574,31 @@ int cell_unskip_stars_tasks(struct cell *c, struct scheduler *s) { const int cj_nodeID = nodeID; #endif - /* We only want to activate the task if the cell is active and is - going to update some gas on the *local* node */ - if ((ci_nodeID == nodeID && cj_nodeID == nodeID) && - (ci_active || cj_active)) { + if (t->type == task_type_self && ci_active) { + scheduler_activate(s, t); + } + else if (t->type == task_type_sub_self && ci_active) { scheduler_activate(s, t); + } - } else if ((ci_nodeID == nodeID && cj_nodeID != nodeID) && (cj_active)) { + else if (t->type == task_type_pair || t->type == task_type_sub_pair) { - scheduler_activate(s, t); + /* We only want to activate the task if the cell is active and is + going to update some gas on the *local* node */ + if ((ci_nodeID == nodeID && cj_nodeID == nodeID) && + (ci_active || cj_active)) { - } else if ((ci_nodeID != nodeID && cj_nodeID == nodeID) && (ci_active)) { + scheduler_activate(s, t); - scheduler_activate(s, t); + } else if ((ci_nodeID == nodeID && cj_nodeID != nodeID) && (cj_active)) { + + scheduler_activate(s, t); + + } else if ((ci_nodeID != nodeID && cj_nodeID == nodeID) && (ci_active)) { + + scheduler_activate(s, t); + } } /* Nothing more to do here, all drifts and sorts activated above */