helly Sun Jun 22 10:55:45 2003 EDT
Modified files:
/spl spl_array.c
Log:
Fix array writing
Index: spl/spl_array.c
diff -u spl/spl_array.c:1.5 spl/spl_array.c:1.6
--- spl/spl_array.c:1.5 Thu Jun 12 15:30:54 2003
+++ spl/spl_array.c Sun Jun 22 10:55:44 2003
@@ -50,6 +50,7 @@
typedef struct {
zval *obj;
zval *idx;
+ int locked;
} spl_array_writer_object;
static zend_class_entry *spl_array_writer_default_get_class(zval *object TSRMLS_DC)
@@ -94,8 +95,12 @@
}
if (writer->idx)
{
- writer->idx->refcount--;
- DELETE_ZVAL(writer->idx);
+ if (writer->locked) {
+ PZVAL_UNLOCK(writer->idx);
+ } else {
+ writer->idx->refcount--;
+ DELETE_ZVAL(writer->idx);
+ }
}
efree(writer);
}
@@ -140,7 +145,6 @@
writer = (spl_array_writer_object *) zend_object_store_get_object(object
TSRMLS_CC);
writer->obj = obj; obj->refcount++;
writer->idx = idx; idx->refcount++;
-
}
/* }}} */
@@ -205,8 +209,11 @@
T(result->u.var).var.ptr = *retval;
AI_PTR_2_PTR_PTR(T(result->u.var).var);
writer = (spl_array_writer_object *)
zend_object_store_get_object(*retval TSRMLS_CC);
- writer->obj = *container_ptr; writer->obj->refcount++;
- writer->idx = dim; writer->idx->refcount++;
+ writer->obj = *container_ptr;
+ writer->obj->refcount++;
+ writer->idx = dim;
+ PZVAL_LOCK(writer->idx);
+ writer->locked = 1;
SELECTIVE_PZVAL_LOCK(*retval, result);
} else {
zend_error(E_ERROR, "Object must implement spl_array_access
for write access");
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php