If there is only ever 1 colour, this test will always be false and we'll leave a load of halo exchanges hanging.  Is this a possible scenario for indirect loops?  Certainly for the FakePlan case this will be the case.  Do we get around this by the halo_exchange_begin being a no-op in this situation?