Skip to content

Commit f295772

Browse files
author
Rob Richards
committed
changes for /ext/dom document ref count
changes for /ext/dom internal object handling
1 parent 6d72c89 commit f295772

File tree

3 files changed

+21
-12
lines changed

3 files changed

+21
-12
lines changed

ext/xsl/php_xsl.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,9 @@ zend_object_value xsl_objects_new(zend_class_entry *class_type TSRMLS_DC)
127127
intern->std.in_get = 0;
128128
intern->std.in_set = 0;
129129
intern->ptr = NULL;
130-
intern->node_list = NULL;
131130
intern->prop_handler = NULL;
132131
intern->parameter = NULL;
132+
intern->document = NULL;
133133

134134
base_class = class_type;
135135
while(base_class->type != ZEND_INTERNAL_CLASS && base_class->parent != NULL) {
@@ -144,6 +144,7 @@ zend_object_value xsl_objects_new(zend_class_entry *class_type TSRMLS_DC)
144144
ALLOC_HASHTABLE(intern->parameter);
145145
zend_hash_init(intern->parameter, 0, NULL, ZVAL_PTR_DTOR, 0);
146146
retval.handle = zend_objects_store_put(intern, xsl_objects_dtor, dom_objects_clone TSRMLS_CC);
147+
intern->handle = retval.handle;
147148
retval.handlers = &dom_object_handlers;
148149
return retval;
149150
}

ext/xsl/php_xsl.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,9 @@ extern zend_module_entry xsl_module_entry;
4545
typedef struct _xsl_object {
4646
zend_object std;
4747
void *ptr;
48+
dom_ref_obj *document;
4849
HashTable *prop_handler;
49-
node_list_pointer *node_list;
50+
zend_object_handle handle;
5051
HashTable *parameter;
5152
} xsl_object;
5253

ext/xsl/xsltprocessor.c

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -128,13 +128,14 @@ PHP_FUNCTION(xsl_xsltprocessor_import_stylesheet)
128128
xsltStylesheetPtr sheetp, oldsheetp;
129129
xmlDocPtr newdocp;
130130
xsl_object *intern;
131+
dom_object *docobj;
131132

132133
DOM_GET_THIS(id);
133134

134135
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &docp) == FAILURE) {
135136
RETURN_FALSE;
136137
}
137-
DOM_GET_OBJ(doc, docp, xmlDocPtr);
138+
DOM_GET_OBJ(doc, docp, xmlDocPtr, docobj);
138139
/* copy the doc, so that it's not accessable from outside
139140
FIXME: and doubling memory consumption...
140141
*/
@@ -175,14 +176,17 @@ PHP_FUNCTION(xsl_xsltprocessor_transform_to_doc)
175176
int ret;
176177
char **params = NULL;
177178
xsl_object *intern;
179+
dom_object *docobj;
178180

179-
DOM_GET_THIS_OBJ(sheetp, id, xsltStylesheetPtr);
180-
181+
id = getThis();
182+
intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);
183+
sheetp = (xsltStylesheetPtr) intern->ptr;
184+
181185
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &docp) == FAILURE) {
182186
RETURN_FALSE;
183187
}
184-
DOM_GET_OBJ(doc, docp, xmlDocPtr);
185-
intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);
188+
DOM_GET_OBJ(doc, docp, xmlDocPtr, docobj);
189+
186190
if (intern->parameter) {
187191
params = php_xsl_xslt_make_params(intern->parameter, 0 TSRMLS_CC);
188192
}
@@ -193,7 +197,7 @@ PHP_FUNCTION(xsl_xsltprocessor_transform_to_doc)
193197
}
194198

195199
if (newdocp) {
196-
DOM_RET_OBJ(rv, (xmlNodePtr) newdocp, &ret);
200+
DOM_RET_OBJ(rv, (xmlNodePtr) newdocp, &ret, NULL);
197201
} else {
198202
RETURN_FALSE;
199203
}
@@ -224,14 +228,17 @@ PHP_FUNCTION(xsl_xsltprocessor_transform_to_xml)
224228
int doc_txt_len;
225229
char **params = NULL;
226230
xsl_object *intern;
231+
dom_object *docobj;
227232

228-
DOM_GET_THIS_OBJ(sheetp, id, xsltStylesheetPtr);
229-
233+
id = getThis();
234+
intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);
235+
sheetp = (xsltStylesheetPtr) intern->ptr;
236+
230237
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &docp) == FAILURE) {
231238
RETURN_FALSE;
232239
}
233-
DOM_GET_OBJ(doc, docp, xmlDocPtr);
234-
intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);
240+
DOM_GET_OBJ(doc, docp, xmlDocPtr, docobj);
241+
235242
if (intern->parameter) {
236243
params = php_xsl_xslt_make_params(intern->parameter, 0 TSRMLS_CC);
237244
}

0 commit comments

Comments
 (0)