diff options
Diffstat (limited to 'src/DumpGH.c')
-rw-r--r-- | src/DumpGH.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/src/DumpGH.c b/src/DumpGH.c index 471e5c8..bc673c3 100644 --- a/src/DumpGH.c +++ b/src/DumpGH.c @@ -323,16 +323,30 @@ static int Checkpoint (const cGH *GH, int called_from) } else { - if (myGH->cp_filename_list[myGH->cp_filename_index]) + if (checkpoint_keep > 0) { - if (checkpoint_keep > 0) + if (myGH->cp_filename_list[myGH->cp_filename_index]) { remove (myGH->cp_filename_list[myGH->cp_filename_index]); + free (myGH->cp_filename_list[myGH->cp_filename_index]); + myGH->cp_filename_list[myGH->cp_filename_index] = NULL; + } + myGH->cp_filename_list[myGH->cp_filename_index] = strdup (filename); + myGH->cp_filename_index = (myGH->cp_filename_index+1) % checkpoint_keep; + if (myGH->checkpoint_keep != checkpoint_keep) + { + char **cp_filename_list = calloc (checkpoint_keep, sizeof (char *)); + int min = myGH->checkpoint_keep < checkpoint_keep ? + myGH->checkpoint_keep : checkpoint_keep; + while (min-- > 0) + { + cp_filename_list[min] = myGH->cp_filename_list[min]; + } + free (myGH->cp_filename_list); + myGH->cp_filename_list = cp_filename_list; + myGH->checkpoint_keep = checkpoint_keep; } - free (myGH->cp_filename_list[myGH->cp_filename_index]); } - myGH->cp_filename_list[myGH->cp_filename_index] = strdup (filename); - myGH->cp_filename_index = (myGH->cp_filename_index+1) % abs (checkpoint_keep); } } } |