[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/KDE/4.1/kdelibs/kjs
From:       Maks Orlovich <maksim () kde ! org>
Date:       2008-08-26 2:07:16
Message-ID: 1219716436.077742.28100.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 852579 by orlovich:

Make sure to have breaks jump to before the EndForIn instruction so that 
the for in stack entry isn't leaked. Fixes explosive memory consumption on 
 http://www.chron.com/ stories. 
 
(Perhaps following olliej's approach and using GCable objects for the context 
 would be a good idea, since it'd simplify all of this, and lighten ExecState)

BUG: 165847


 M  +6 -3      nodes2bytecode.cpp  


--- branches/KDE/4.1/kdelibs/kjs/nodes2bytecode.cpp #852578:852579
@@ -1273,11 +1273,14 @@
     // The end address is here (#2 since return val..)
     CodeGen::patchJumpToNext(comp, block, fetchNext, 2);
 
-    // Cleanup
+    // The looping action ends here.. We need to do it before the EndForIn \
instruction so we always cleanup +    // right on breaks.
+    comp->exitLoop(this, block);
+    comp->popNest(); // Remove the cleanup entry.. Note that the breaks go to before \
here.. +
+    // Cleanup.
     CodeGen::emitOp(comp, block, Op_EndForIn);
 
-    comp->exitLoop(this, block);
-    comp->popNest(); // Remove the cleanup entry.. Note that the breaks go to before \
here..  }
 
 // Helper for continue/break -- emits stack cleanup call if needed,


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic