--- lib/ftfile.c.orig Thu Feb 13 05:38:42 2003
+++ lib/ftfile.c Fri Feb 10 10:39:40 2006
@@ -311,7 +311,7 @@
int ftfile_expire (struct ftfile_entries *fte, int doit, int curbytes)
{
u_int i;
- struct ftfile_entry *n1;
+ struct ftfile_entry *n1, *n2;
u_int64 bytes;
if ((fte->num_files - i) <= fte->max_files)
break;
@@ -340,6 +345,10 @@
fte->num_files -= i;
fte->num_bytes -= bytes;
}
+ if (n2 != NULL) {
+ ftfile_entry_free(n2);
+ n2 = NULL;
+ }
}
if (debug)
@@ -354,15 +363,20 @@
*/
if (fte->max_bytes && (fte->num_bytes+curbytes > fte->max_bytes)) {
+ n2 = NULL;
FT_TAILQ_FOREACH(n1, &fte->head, chain) {
+ if (n2 != NULL) {
+ ftfile_entry_free(n2);
+ n2 = NULL;
+ }
fterr_info("remove/2 %s", n1->name);
bytes += n1->size;
++i;
if (doit) {
+ n2 = n1;
FT_TAILQ_REMOVE(&fte->head, n1, chain);
if (unlink(n1->name) == -1)
fterr_warn("unlink(%s)", n1->name);
- ftfile_entry_free(n1);
}
if ((fte->num_bytes+curbytes - bytes) <= fte->max_bytes)
break;
@@ -371,6 +385,10 @@
fte->num_files -= i;
fte->num_bytes -= bytes;
}
+ if (n2 != NULL) {
+ ftfile_entry_free(n2);
+ n2 = NULL;
+ }
}
if (debug)
@@ -762,13 +780,19 @@
{
struct ftfile_entry *n1, *n2;
+ n2 = NULL;
FT_TAILQ_FOREACH(n1, &fte->head, chain) {
+ if (n2 != NULL) {
+ ftfile_entry_free(n2);
+ n2 = NULL;
+ }
FT_TAILQ_REMOVE(&fte->head, n1, chain);
n2 = n1;
- n1 = FT_TAILQ_NEXT(n1, chain);
+ }