aboutsummaryrefslogtreecommitdiff
path: root/src/DumpGH.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/DumpGH.c')
-rw-r--r--src/DumpGH.c24
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);
}
}
}