Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:26403 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 68726 invoked by uid 1010); 7 Nov 2006 11:25:54 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 68711 invoked from network); 7 Nov 2006 11:25:54 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 7 Nov 2006 11:25:54 -0000 Authentication-Results: pb1.pair.com smtp.mail=php_lists@realplain.com; spf=permerror; sender-id=unknown Authentication-Results: pb1.pair.com header.from=php_lists@realplain.com; sender-id=unknown Received-SPF: error (pb1.pair.com: domain realplain.com from 209.142.136.132 cause and error) X-PHP-List-Original-Sender: php_lists@realplain.com X-Host-Fingerprint: 209.142.136.132 msa2-mx.centurytel.net Linux 2.4/2.6 Received: from [209.142.136.132] ([209.142.136.132:43742] helo=msa2-mx.centurytel.net) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 30/81-58090-04D60554 for ; Tue, 07 Nov 2006 06:25:53 -0500 Received: from pc1 (d31-240.rt-bras.wnvl.centurytel.net [69.179.158.240]) by msa2-mx.centurytel.net (8.13.6/8.13.6) with SMTP id kA7BPnXB010179; Tue, 7 Nov 2006 05:25:49 -0600 Message-ID: <01a901c7025f$7a987930$0201a8c0@pc1> To: , "Dmitry Stogov" , "Michael Wallner" References: <018201c7025a$d8042150$0201a8c0@pc1> <4550691D.2080302@php.net> Date: Tue, 7 Nov 2006 05:25:50 -0600 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2800.1807 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1807 Subject: Re: [PHP-DEV] Re: [PATCH] =& doesn't remove "old" references like unset() From: php_lists@realplain.com ("Matt Wilmas") ----- Original Message ----- From: "Michael Wallner" Sent: Tuesday, November 07, 2006 > Matt Wilmas wrote: > > Hi (Dmitry?), > > > > See Bug #33282 -- I saw it in the Bug Summary; don't know if there are other > > related ones... Same applies to foreach ($arr ... &$v) which is where I > > noticed it last week with var_dump($arr). All elements that WERE referenced > > but aren't anymore still have is_ref=1 (when refcount=1). Only the last > > referenced element should be a reference (unless the others were to begin > > with). unset()'ing the reference variable removes the reference from the > > last element. Example: > > > > $a = array(1, 2, 3); > > $r = &$a[0]; > > $r = &$a[1]; > > $r = &$a[2]; > > var_dump($a); > > > > array(3) { > > [0]=> > > &int(1) > > [1]=> > > &int(2) > > [2]=> > > &int(3) // unset($r) will take care of this one > > } > > > > The reference (&) should no longer be on the first 2 elements, right? > > Setting is_ref=0 when refcount=1 in zend_assign_to_variable_reference() > > fixes it. I assume it won't cause other problems since the same thing is > > done in zval_ptr_dtor(). :-) > > > > This looks like it may actually fix a lot of previously bogus'ed bug reports? Not sure which ones you mean (searching for "reference" returns many bugs, and I didn't look very thoroughly), but so everyone knows since I mentioned foreach(), this doesn't change the behavior reported in Bugs #36240, #37410, #39307, etc... > -- > Michael Matt