Index: /branches/1.0/xcache.c
===================================================================
--- /branches/1.0/xcache.c	(revision 140)
+++ /branches/1.0/xcache.c	(revision 141)
@@ -403,5 +403,5 @@
 			if (cache->deletes) {
 				last = (xc_delete_t *) &cache->deletes;
-				for (p = *last; p; p = p->next) {
+				for (p = *last; p; p = *last) {
 					if (t - p->dtime > 3600) {
 						p->refcount = 0;
@@ -1207,5 +1207,5 @@
 		case XC_OP_CLEAR:
 			{
-				xc_entry_t *e;
+				xc_entry_t *e, *next;
 				int i, c;
 
@@ -1218,5 +1218,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);
 						}
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);
 						}
