summaryrefslogtreecommitdiff
path: root/processor
diff options
context:
space:
mode:
authorXuefer <xuefer@gmail.com>2014-11-11 13:48:34 +0000
committerXuefer <xuefer@gmail.com>2014-11-11 13:48:34 +0000
commit5eb6e2f585336bcba069db483701508144baa363 (patch)
tree62d4d7d46504b444de3e97f1315a0ea3d24a15e8 /processor
parent4ed407f1e458fc07960926bde05b45648ce50bc6 (diff)
downloadxcache-5eb6e2f585336bcba069db483701508144baa363.tar.gz
xcache-5eb6e2f585336bcba069db483701508144baa363.zip
cacher: fix recursive object caching, fix multiple object caching (typo of SRC)
git-svn-id: svn://svn.lighttpd.net/xcache/trunk@1564 c26eb9a1-5813-0410-bd6c-c2e55f420ca7
Diffstat (limited to 'processor')
-rw-r--r--processor/foot.m44
-rw-r--r--processor/processor.m49
-rw-r--r--processor/var-helper.h2
3 files changed, 7 insertions, 8 deletions
diff --git a/processor/foot.m4 b/processor/foot.m4
index ff614ef..d92d361 100644
--- a/processor/foot.m4
+++ b/processor/foot.m4
@@ -131,17 +131,15 @@ EXPORTED_FUNCTION(`zval *xc_processor_restore_var(zval *dst, const xc_entry_var_
dnl fprintf(stderr, "mark[%p] = %p\n", src, dst);
zend_hash_add(&processor.zvalptrs, (char *)src->value, sizeof(src->value), (void *) &dst, sizeof(dst), NULL);
}
- processor.entry_var_src = src;
processor.index_to_ce = index_to_ce;
#ifdef ZEND_ENGINE_2
if (src->objects_count) {
processor.object_handles = emalloc(sizeof(*processor.object_handles) * src->objects_count);
- xc_vector_init(zend_object_handle, &processor.objects, 0);
for (i = 0; i < src->objects_count; ++i) {
zend_object *object = emalloc(sizeof(*object));
- xc_restore_zend_object(&processor, object, &src->objects[i] TSRMLS_CC);
processor.object_handles[i] = zend_objects_store_put(object, (zend_objects_store_dtor_t) zend_objects_destroy_object, (zend_objects_free_object_storage_t) zend_objects_free_object_storage, NULL TSRMLS_CC);
+ xc_restore_zend_object(&processor, object, &src->objects[i] TSRMLS_CC);
}
}
#endif
diff --git a/processor/processor.m4 b/processor/processor.m4
index c33999c..25ba045 100644
--- a/processor/processor.m4
+++ b/processor/processor.m4
@@ -123,11 +123,11 @@ DEF_STRUCT_P_FUNC(`zend_object', , `dnl {{{
xc_var_collect_class(processor, SRC(ce) TSRMLS_CC);
DONE(ce)
', `IFSTORE(`
- DST(ce) = (zend_class_entry *) xc_var_store_ce(processor, DST(ce) TSRMLS_CC);
+ DST(ce) = (zend_class_entry *) xc_var_store_ce(processor, SRC(ce) TSRMLS_CC);
DONE(ce)
', `IFRESTORE(`
assert(processor->index_to_ce);
- DST(ce) = processor->index_to_ce[(size_t) DST(ce)];
+ DST(ce) = processor->index_to_ce[(size_t) SRC(ce)];
DONE(ce)
', `
PROCESS_SCALAR(ce, lu, unsigned long)
@@ -149,10 +149,10 @@ DEF_STRUCT_P_FUNC(`zend_object_value', , `dnl {{{
xc_var_collect_object(processor, SRC(handle) TSRMLS_CC);
DONE(handle)
', `IFSTORE(`
- DST(handle) = (zend_object_handle) xc_var_store_handle(processor, DST(handle) TSRMLS_CC);
+ DST(handle) = (zend_object_handle) xc_var_store_handle(processor, SRC(handle) TSRMLS_CC);
DONE(handle)
', `IFRESTORE(`
- DST(handle) = xc_var_restore_handle(processor, (size_t) DST(handle) TSRMLS_CC);
+ DST(handle) = xc_var_restore_handle(processor, (size_t) SRC(handle) TSRMLS_CC);
DONE(handle)
', `
PROCESS(zend_object_handle, handle)
@@ -1384,6 +1384,7 @@ DEF_STRUCT_P_FUNC(`xc_entry_php_t', , `dnl {{{
dnl }}}
DEF_STRUCT_P_FUNC(`xc_entry_var_t', , `dnl {{{
IFCALCSTORE(`xc_entry_var_t *vsrc = /* const_cast */ (xc_entry_var_t *) src;')
+ IFRESTORE(`processor->entry_var_src = src;')
dnl restore is done in foot.m4
STRUCT(xc_entry_t, entry)
diff --git a/processor/var-helper.h b/processor/var-helper.h
index 92feb22..0ba599a 100644
--- a/processor/var-helper.h
+++ b/processor/var-helper.h
@@ -20,7 +20,7 @@ static size_t xc_var_store_handle(xc_processor_t *processor, zend_object_handle
size_t *index;
if (zend_hash_index_find(&processor->handle_to_index, handle, (void **) &index) != SUCCESS) {
- php_error_docref(NULL TSRMLS_CC, E_CORE_ERROR, "Internal error: handle not found in objects");
+ php_error_docref(NULL TSRMLS_CC, E_CORE_ERROR, "Internal error: handle %d not found in objects", handle);
return (size_t) -1;
}