diff --git a/src/server/cache-node.c b/src/server/cache-node.c
index bef71a0cca4de70ddfe8be57db30db44609f09d4..93e6e6e4d5905ae60c29a4430a7f609e90637bae 100644
--- a/src/server/cache-node.c
+++ b/src/server/cache-node.c
@@ -182,3 +182,27 @@ set_mru(Cache_node_mcb *mcb,
     unlink_lru(node, &mcb->lru, &mcb->mru);
     insert_mru(node, &mcb->lru, &mcb->mru);
 }
+static void
+free_cache_node_block (Cache_node_block *block)
+{
+    sfree(block->nodes);
+    sfree(block);
+}
+
+extern void
+free_cache_node_mcb(Cache_node_mcb *control)
+{
+    Cache_node_block *block;
+
+    while ( control->last_block != NULL )
+    {
+	block = control->last_block;
+	control->last_block = block->link;
+	free_cache_node_block (block);
+    }
+
+    sfree(control->lookup_table);
+    sfree(control);
+}
+
+