diff --git a/src/task.c b/src/task.c index fad903b3de818504a9c3dcda478e7a1dd1dd86d0..03566868a5400582a01e9d3d88520009b7e77cdc 100644 --- a/src/task.c +++ b/src/task.c @@ -317,11 +317,15 @@ void task_unlock(struct task *t) { cell_munlocktree(ci); break; - case task_type_grav_mm: case task_type_grav_long_range: cell_munlocktree(ci); break; + case task_type_grav_mm: + cell_munlocktree(ci); + cell_munlocktree(cj); + break; + default: break; } @@ -444,12 +448,20 @@ int task_lock(struct task *t) { break; case task_type_grav_long_range: - case task_type_grav_mm: /* Lock the m-poles */ if (ci->mhold) return 0; if (cell_mlocktree(ci) != 0) return 0; break; + case task_type_grav_mm: + /* Lock both m-poles */ + if (ci->mhold || cj->mhold) return 0; + if (cell_mlocktree(ci) != 0) return 0; + if (cell_mlocktree(cj) != 0) { + cell_munlocktree(ci); + return 0; + } + default: break; }