/* See the comment in recovery.h on how the "save" parameter is used */ void rec_done(int save) { if (!rec_file) return; /* * If we're the main process for a --fork'ed group of children, leave our .rec * file around until the children terminate (at which time we may be called * again with save < 0, meaning forced non-saving). */ #ifndef HAVE_MPI if (!save && options.fork && john_main_process) { #else if (!save && (options.fork || mpi_p > 1) && john_main_process) { #endif rec_save(); return; } if (save > 0) rec_save(); else log_flush(); if (fclose(rec_file)) pexit("fclose"); rec_file = NULL; if ((!save || save == -1) && unlink(path_expand(rec_name))) pexit("unlink: %s", path_expand(rec_name)); } static void rec_format_error(char *fn) { path_done(); cleanup_tiny_memory(); /* * MEMDBG_PROGRAM_EXIT_CHECKS() would cause the output * At Program Exit * MemDbg_Validate level 0 checking Passed * to be writen prior to the * Incorrect crash recovery file: ... * output. * Not sure if we want this. */ // MEMDBG_PROGRAM_EXIT_CHECKS(stderr); // FIXME if (fn && errno && ferror(rec_file)) pexit("%s", fn); else { fprintf(stderr, "Incorrect crash recovery file: %s\n", path_expand(rec_name)); error(); } }
static void john_done(void) { path_done(); if ((options.flags & FLG_CRACKING_CHK) && !(options.flags & FLG_STDOUT)) { if (event_abort) log_event(timer_abort ? "Session aborted" : "Session stopped (max run-time reached)"); else log_event("Session completed"); } log_done(); check_abort(0); cleanup_tiny_memory(); }