Index: trunk/xcache.c
===================================================================
--- trunk/xcache.c	(revision 254)
+++ trunk/xcache.c	(revision 268)
@@ -500,4 +500,7 @@
 			add_assoc_long_ex(ei, ZEND_STRS("function_cnt"),  php->funcinfo_cnt);
 			add_assoc_long_ex(ei, ZEND_STRS("class_cnt"),     php->classinfo_cnt);
+#ifdef ZEND_ENGINE_2_1
+			add_assoc_long_ex(ei, ZEND_STRS("autoglobal_cnt"),php->autoglobal_cnt);
+#endif
 			break;
 		case XC_TYPE_VAR:
@@ -580,4 +583,20 @@
 				UNISW(0, ci->type), ci->key, ci->key_size TSRMLS_CC);
 	}
+
+#ifdef ZEND_ENGINE_2_1
+	/* trigger auto_globals jit */
+	for (i = 0; i < p->autoglobal_cnt; i ++) {
+		xc_autoglobal_t *aginfo = &p->autoglobals[i];
+		/*
+		zend_auto_global *auto_global;
+		if (zend_u_hash_find(CG(auto_globals), aginfo->type, aginfo->key, aginfo->key_len+1, (void **) &auto_global)==SUCCESS) {
+			if (auto_global->armed) {
+				auto_global->armed = auto_global->auto_global_callback(auto_global->name, auto_global->name_len TSRMLS_CC);
+			}
+		}
+		*/
+		zend_u_is_auto_global(aginfo->type, aginfo->key, aginfo->key_len TSRMLS_CC);
+	}
+#endif
 
 	i = 1;
@@ -949,8 +968,23 @@
 
 #ifdef HAVE_XCACHE_CONSTANT
-	php.constinfo_cnt = zend_hash_num_elements(EG(zend_constants)) - old_constinfo_cnt;
-#endif
-	php.funcinfo_cnt  = zend_hash_num_elements(CG(function_table)) - old_funcinfo_cnt;
-	php.classinfo_cnt = zend_hash_num_elements(CG(class_table))    - old_classinfo_cnt;
+	php.constinfo_cnt  = zend_hash_num_elements(EG(zend_constants)) - old_constinfo_cnt;
+#endif
+	php.funcinfo_cnt   = zend_hash_num_elements(CG(function_table)) - old_funcinfo_cnt;
+	php.classinfo_cnt  = zend_hash_num_elements(CG(class_table))    - old_classinfo_cnt;
+#ifdef ZEND_ENGINE_2_1
+	/* {{{ count php.autoglobal_cnt */ {
+		Bucket *b;
+
+		php.autoglobal_cnt = 0;
+		for (b = CG(auto_globals)->pListHead; b != NULL; b = b->pListNext) {
+			zend_auto_global *auto_global = (zend_auto_global *) b->pData;
+			/* check if actived */
+			if (auto_global->auto_global_callback && !auto_global->armed) {
+				php.autoglobal_cnt ++;
+			}
+		}
+	}
+	/* }}} */
+#endif
 
 #define X_ALLOC_N(var, cnt) do {     \
@@ -967,8 +1001,11 @@
 
 #ifdef HAVE_XCACHE_CONSTANT
-	X_ALLOC_N(constinfos, constinfo_cnt);
-#endif
-	X_ALLOC_N(funcinfos,  funcinfo_cnt);
-	X_ALLOC_N(classinfos, classinfo_cnt);
+	X_ALLOC_N(constinfos,  constinfo_cnt);
+#endif
+	X_ALLOC_N(funcinfos,   funcinfo_cnt);
+	X_ALLOC_N(classinfos,  classinfo_cnt);
+#ifdef ZEND_ENGINE_2_1
+	X_ALLOC_N(autoglobals, autoglobal_cnt);
+#endif
 #undef X_ALLOC
 	/* }}} */
@@ -1006,5 +1043,28 @@
 
 #undef COPY_H
-		/* for ZE1, cest need to fix inside store */
+
+		/* for ZE1, cest need to be fixed inside store */
+
+#ifdef ZEND_ENGINE_2_1
+		/* scan for acatived auto globals */
+		i = 0;
+		for (b = CG(auto_globals)->pListHead; b != NULL; b = b->pListNext) {
+			zend_auto_global *auto_global = (zend_auto_global *) b->pData;
+			/* check if actived */
+			if (auto_global->auto_global_callback && !auto_global->armed) {
+				xc_autoglobal_t *data = &php.autoglobals[i ++];
+
+				assert(i < php.autoglobal_cnt);
+				UNISW(NOTHING, data->type = b->key.type;)
+				if (UNISW(1, b->key.type == IS_STRING)) {
+					ZSTR_S(data->key)     = BUCKET_KEY_S(b);
+				}
+				else {
+					ZSTR_U(data->key)     = BUCKET_KEY_U(b);
+				}
+				data->key_len = b->nKeyLength - 1;
+			}
+		}
+#endif
 	}
 	/* }}} */
@@ -1036,4 +1096,7 @@
 err_##var:
 
+#ifdef ZEND_ENGINE_2_1
+	X_FREE(autoglobals)
+#endif
 	X_FREE(classinfos)
 	X_FREE(funcinfos)
@@ -1100,4 +1163,7 @@
 		efree(xce.data.php->var); \
 	}
+#ifdef ZEND_ENGINE_2_1
+	X_FREE(autoglobals)
+#endif
 	X_FREE(classinfos)
 	X_FREE(funcinfos)
