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

Reply via email to