/* _save_time_cb(): timer callback. */ static void _save_time_cb(uv_timer_t* tim_u, c3_i sas_i) { u2_save* sav_u = &u2_Host.sav_u; if ( sav_u->pid_w ) { return; } if ( u2A->ent_w > sav_u->ent_w ) { // uL(fprintf(uH, "autosaving... ent_w %d\n", u2A->ent_w)); u2_cm_purge(); u2_lo_grab("save", u2_none); #ifdef FORKPT c3_w pid_w; if ( 0 == (pid_w = fork()) ) { u2_loom_save(u2A->ent_w); exit(0); } else { uL(fprintf(uH, "checkpoint: process %d\n", pid_w)); sav_u->ent_w = u2A->ent_w; sav_u->pid_w = pid_w; } #else u2_loom_save(u2A->ent_w); sav_u->ent_w = u2A->ent_w; #endif } }
/* u2_lo_shut(): end callback processing. */ void u2_lo_shut(u2_bean inn) { // u2_lo_grab("lo_shut a", u2_none); // process actions // u2_raft_work(u2A); // u2_lo_grab("lo_shut b", u2_none); // update time // u2_reck_time(u2A); // u2_lo_grab("lo_shut c", u2_none); // for input operations, poll fs (XX not permanent) // XX remove raty_lead guard // if ( u2R->typ_e == u2_raty_lead && u2_yes == inn ) { u2_unix_ef_look(); } // u2_lo_grab("lo_shut d", u2_none); // clean shutdown // if ( u2_no == u2_Host.liv ) { // direct save and die // u2_cm_purge(); // u2_lo_grab("lo_exit", u2_none); u2_loom_save(u2A->ent_w); u2_loom_exit(); u2_lo_exit(); exit(0); } else { // poll arvo to generate any event binding changes // _lo_poll(); } }