[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[tyndur-devel] [PATCH] cdi/cache: Fix fuer PF und Memleak
! cdi/cache: Wenn das einlesen eines Blockes fehlgeschlagen ist, und ein
Block deshalb freigegeben werden muss, reich es nicht, ihn
nur aus dem Baum zu entfernen, er muss auch aus der
LRU-Liste entfernt werden, sonnst knallts beim naechsten
Sync.
! cdi/cache: Im oben erwaehnten Fall wurden bis jetzt die privaten Daten
fuer den Block nicht freigegeben.
Signed-off-by: Antoine Kaufmann <toni@xxxxxxxxxx>
---
src/modules/cdi/lib/cache.c | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/src/modules/cdi/lib/cache.c b/src/modules/cdi/lib/cache.c
index fc2fa49..b8c41ba 100644
--- a/src/modules/cdi/lib/cache.c
+++ b/src/modules/cdi/lib/cache.c
@@ -428,10 +428,19 @@ struct cdi_cache_block* cdi_cache_block_get(struct cdi_cache* cache,
// werden
if (in_tree) {
tree_remove(c->tree, b);
+
+ // Auch aus der LRU-Liste muss der Block ggf. entfernt werden
+ if (b->lru_next) {
+ b->lru_next->lru_prev = b->lru_prev;
+ }
+ if (b->lru_prev) {
+ b->lru_prev->lru_next = b->lru_next;
+ }
}
c->blocks_used--;
free(b->cdi.data);
+ free(b->cdi.private);
free(b);
return NULL;
}
--
1.6.0.6