int main() { int dmtcp_enabled = dmtcp_is_enabled(); if ( ! dmtcp_enabled ) { printf("\n *** dmtcp_is_enabled: executable seems to not be running" " under dmtcp_launch.\n\n"); } int original_generation; if ( dmtcp_enabled ) { original_generation = dmtcp_get_generation(); } int retval = dmtcp_checkpoint(); if (retval == DMTCP_AFTER_CHECKPOINT) { // Wait long enough for checkpoint request to be written out. while (dmtcp_get_generation() == original_generation) { sleep(1); } printf("*** dmtcp_checkpoint: This program has now invoked a checkpoint.\n" " It will resume its execution next.\n"); } else if (retval == DMTCP_AFTER_RESTART) { printf("*** dmtcp_checkpoint: This program is now restarting.\n"); } else if (retval == DMTCP_NOT_PRESENT) { printf(" *** dmtcp_checkpoint: DMTCP is not running." " Skipping checkpoint.\n"); } printf("\n*** Process done executing. Successfully exiting.\n"); if (retval == DMTCP_AFTER_CHECKPOINT) { printf("*** Execute ./dmtcp_restart_script.sh to restart.\n"); } return 0; }
int main() { if (!dmtcp_is_enabled()) { printf("\n *** dmtcp_is_enabled: executable seems to not be running" " under dmtcp_launch.\n"); } int retval = dmtcp_disable_ckpt(); if (retval == DMTCP_NOT_PRESENT) { printf("\n *** dmtcp_disable_ckpt: DMTCP_NOT_PRESENT." " Will exit.\n"); exit(0); } // This assumes that DMTCP is present. int original_generation = dmtcp_get_generation(); printf("*** dmtcp_disable_ckpt: Checkpoints are blocked.\n"); printf(" But a checkpoint was requested every two seconds: '-i 2'\n"); printf("*** sleep: sleeping 3 seconds.\n\n"); sleep(3); printf("*** dmtcp_enable_ckpt: Will now unblock checkpointing\n" " and write ./dmtcp_restart_script.sh.\n"); printf("*** Execute ./dmtcp_restart_script.sh to restart from here.\n"); dmtcp_enable_ckpt(); // Wait long enough for checkpoint to be written. while (dmtcp_get_generation() == original_generation) { sleep(1); } printf("\n*** Process done executing. Successfully exiting.\n"); return 0; }
void dmtcp_event_hook(DmtcpEvent_t event, DmtcpEventData_t *data) { switch (event) { case DMTCP_EVENT_WRITE_CKPT: if (dmtcp_get_generation() == 1) { baseCkptDir = (char *)dmtcp_get_ckpt_dir(); gethostname(hostname, MAX_HOST_NAME_LENTGH - 1); } snprintf(newCkptDir, MAX_CKPT_DIR_LENGTH - 1, "%s/%s/%05"PRIu32"", baseCkptDir, hostname, dmtcp_get_generation()); dmtcp_set_ckpt_dir(newCkptDir); dmtcp_set_coord_ckpt_dir(newCkptDir); break; case DMTCP_EVENT_RESUME: break; default: ; } /* Call this next line in order to pass DMTCP events to later plugins. */ DMTCP_NEXT_EVENT_HOOK(event, data); }