Index: trunk/mod_cacher/xc_cacher.c
===================================================================
--- trunk/mod_cacher/xc_cacher.c	(revision 1204)
+++ trunk/mod_cacher/xc_cacher.c	(revision 1217)
@@ -2560,29 +2560,21 @@
 	}
 
-static inline zend_bool xc_var_has_prefix(xc_entry_t *entry, zval *prefix TSRMLS_DC) /* {{{ */
+static inline zend_bool xc_var_has_prefix(const xc_entry_t *entry, zval *prefix, const xc_namebuffer_t *prefix_buffer TSRMLS_DC) /* {{{ */
 {
 	zend_bool result = 0;
-	VAR_BUFFER_FLAGS(prefix);
 
 	if (UNISW(IS_STRING, entry->name_type) != prefix->type) {
 		return 0;
 	}
-	VAR_BUFFER_INIT(prefix);
 
 #ifdef IS_UNICODE
 	if (Z_TYPE(prefix) == IS_UNICODE) {
-		result = entry->name.ustr.len >= prefix_buffer.len
-		 && memcmp(entry->name.ustr.val, prefix_buffer.buffer, prefix_buffer.len * sizeof(Z_USTRVAL_P(prefix)[0])) == 0;
-		goto finish;
-	}
-#endif
-
-	result = entry->name.str.len >= prefix_buffer.len
-	 && memcmp(entry->name.str.val, prefix_buffer.buffer, prefix_buffer.len) == 0;
-	goto finish;
-
-finish:
-	VAR_BUFFER_FREE(prefix);
-	return result;
+		return result = entry->name.ustr.len >= prefix_buffer->len
+		 && memcmp(entry->name.ustr.val, prefix_buffer->buffer, prefix_buffer->len * sizeof(Z_USTRVAL_P(prefix)[0])) == 0;
+	}
+#endif
+
+	return result = entry->name.str.len >= prefix_buffer->len
+	 && memcmp(entry->name.str.val, prefix_buffer->buffer, prefix_buffer->len) == 0;
 }
 /* }}} */
@@ -3320,4 +3312,5 @@
 	zval *prefix;
 	int i, iend;
+	VAR_BUFFER_FLAGS(prefix);
 
 	if (!xc_var_caches) {
@@ -3330,4 +3323,5 @@
 	}
 
+	VAR_BUFFER_INIT(prefix);
 	for (i = 0, iend = xc_var_hcache.size; i < iend; i ++) {
 		xc_cache_t *cache = &xc_var_caches[i];
@@ -3342,5 +3336,5 @@
 				for (entry = cache->cached->entries[entryslotid]; entry; entry = next) {
 					next = entry->next;
-					if (xc_var_has_prefix(entry, prefix TSRMLS_CC)) {
+					if (xc_var_has_prefix(entry, prefix, &prefix_buffer TSRMLS_CC)) {
 						xc_entry_remove_unlocked(XC_TYPE_VAR, cache, entryslotid, entry TSRMLS_CC);
 					}
@@ -3349,4 +3343,5 @@
 		} LEAVE_LOCK(cache);
 	}
+	VAR_BUFFER_FREE(prefix);
 }
 /* }}} */
