Index: /trunk/processor/processor.m4
===================================================================
--- /trunk/processor/processor.m4	(revision 497)
+++ /trunk/processor/processor.m4	(revision 498)
@@ -504,4 +504,5 @@
 	dnl readonly_protection=on
 	dnl main op_array && have early binding
+	zend_uint ii;
 	if (!processor->readonly_protection && !(src == processor->php_src->op_array && processor->php_src->have_early_binding)) {
 		/* really fast shallow copy */
@@ -510,4 +511,6 @@
 		/* deep */
 		STRUCT_P(HashTable, static_variables, HashTable_zval_ptr)
+		STRUCT_ARRAY_I(num_args, zend_arg_info, arg_info)
+		xc_gc_add_op_array(dst TSRMLS_CC);
 		define(`SKIPASSERT_ONCE')
 	}
Index: /trunk/xcache.c
===================================================================
--- /trunk/xcache.c	(revision 497)
+++ /trunk/xcache.c	(revision 498)
@@ -1477,4 +1477,34 @@
 /* }}} */
 
+/* {{{ xc_gc_op_array_t */
+typedef struct {
+	zend_uint num_args;
+	zend_arg_info *arg_info;
+} xc_gc_op_array_t;
+/* }}} */
+void xc_gc_add_op_array(zend_op_array *op_array TSRMLS_DC) /* {{{ */
+{
+	xc_gc_op_array_t gc_op_array;
+	gc_op_array.num_args = op_array->num_args;
+	gc_op_array.arg_info = op_array->arg_info;
+	zend_hash_next_index_insert(&XG(gc_op_arrays), (void *) &gc_op_array, sizeof(gc_op_array), NULL);
+}
+/* }}} */
+static void xc_gc_op_array(void *pDest) /* {{{ */
+{
+	xc_gc_op_array_t *op_array = (xc_gc_op_array_t *) pDest;
+	zend_uint i;
+	if (op_array->arg_info) {
+		for (i = 0; i < op_array->num_args; i++) {
+			efree((char*)op_array->arg_info[i].name);
+			if (op_array->arg_info[i].class_name) {
+				efree((char*)op_array->arg_info[i].class_name);
+			}
+		}
+		efree(op_array->arg_info);
+	}
+}
+/* }}} */
+
 /* module helper function */
 static int xc_init_constant(int module_number TSRMLS_DC) /* {{{ */
@@ -1711,4 +1741,6 @@
 	}
 
+	zend_hash_init(&XG(gc_op_arrays), 32, NULL, xc_gc_op_array, 0);
+
 #if PHP_API_VERSION <= 20041225
 	XG(request_time) = time(NULL);
@@ -1725,4 +1757,5 @@
 {
 	xc_entry_unholds(TSRMLS_C);
+	zend_hash_destroy(&XG(gc_op_arrays));
 	xc_gc_expires_php(TSRMLS_C);
 	xc_gc_expires_var(TSRMLS_C);
Index: /trunk/xcache.h
===================================================================
--- /trunk/xcache.h	(revision 497)
+++ /trunk/xcache.h	(revision 498)
@@ -361,4 +361,5 @@
 int xc_is_ro(const void *p);
 int xc_is_shm(const void *p);
+void xc_gc_add_op_array(zend_op_array *op_array TSRMLS_DC);
 
 #endif /* __XCACHE_H */
Index: /trunk/xcache_globals.h
===================================================================
--- /trunk/xcache_globals.h	(revision 497)
+++ /trunk/xcache_globals.h	(revision 498)
@@ -18,4 +18,6 @@
 	long   var_ttl;
 
+	HashTable gc_op_arrays;
+
 	HashTable internal_function_table;
 	HashTable internal_class_table;
