void master_slaveFinishedCurrentWindow(Master* master, SimulationTime minNextEventTime) { MAGIC_ASSERT(master); utility_assert(minNextEventTime != SIMTIME_INVALID); /* TODO: once we get multiple slaves, we have to block them here * until they have all notified us that they are finished */ /* update our detected min jump time */ master->minJumpTime = master->nextMinJumpTime; /* update the next interval window based on next event times */ SimulationTime newStart = minNextEventTime; SimulationTime newEnd = minNextEventTime + master_getMinTimeJump(master); /* update the new window end as one interval past the new window start, * making sure we dont run over the experiment end time */ if(newEnd > master->endTime) { newEnd = master->endTime; } /* if we are done, make sure the workers know about it */ if(newStart >= newEnd) { master_setKilled(master, TRUE); } /* finally, set the new values */ master->executeWindowStart = newStart; master->executeWindowEnd = newEnd; }
void slave_setKilled(Slave* slave, gboolean isKilled) { MAGIC_ASSERT(slave); master_setKilled(slave->master, isKilled); }