maingene / pyv8

Automatically exported from code.google.com/p/pyv8
0 stars 0 forks source link

Strange memory leak on assignment #153

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
We notice a memory leak when tried to implement the rendering with the 
following logic:

import PyV8

SCRIPT_JS = """
    function build() { return {}; }
    function render(val) { return ""; }
"""

# create JSContext and load JavaScript functions
with PyV8.JSContext() as ctx:
    ctx.eval(SCRIPT_JS)

def render():
    with ctx:
        # the following line causes a memory leak
        ctx.locals.data = ctx.eval(build();')
        return ctx.eval('render(data);')

# render many many times
for i in range(0, 1000000):
    render()

What steps will reproduce the problem?

Use assignment like:

        ctx.locals.data = ctx.eval('build();')

What is the expected output? What do you see instead?

I expect that the memory will be cleared.

What version of the product are you using? On what operating system?

pyv8-1.0+svn472.13440

Original issue reported on code.google.com by e.generalov on 21 Jan 2013 at 10:21

GoogleCodeExporter commented 9 years ago

Original comment by flier...@gmail.com on 1 Feb 2013 at 1:59

GoogleCodeExporter commented 9 years ago
The root cause is PyV8 try to trace every object in context with a living 
object mapping, but if you leave a context with some living objects, the 
mapping will not be free. So, just force free all the objects in the mapping.

Please verify the issue with SVN trunk code after r479, thanks

Original comment by flier...@gmail.com on 3 Feb 2013 at 3:39