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