Index: trunk/xcache.c
===================================================================
--- trunk/xcache.c	(revision 140)
+++ trunk/xcache.c	(revision 141)
@@ -343,5 +343,5 @@
 
 	pp = &cache->deletes;
-	for (p = *pp; p; p = p->next) {
+	for (p = *pp; p; p = *pp) {
 		if (XG(request_time) - p->dtime > 3600) {
 			p->refcount = 0;
@@ -1489,5 +1489,5 @@
 		case XC_OP_CLEAR:
 			{
-				xc_entry_t *e;
+				xc_entry_t *e, *next;
 				int i, c;
 
@@ -1500,5 +1500,6 @@
 				ENTER_LOCK(cache) {
 					for (i = 0, c = cache->hentry->size; i < c; i ++) {
-						for (e = cache->entries[i]; e; e = e->next) {
+						for (e = cache->entries[i]; e; e = next) {
+							next = e->next;
 							xc_entry_remove_dmz(e TSRMLS_CC);
 						}
