I just forgot to explain how to run the Dancer app. Probably easier to use
this app: http://paste.perldancer.org/1nX0n7dg6abTJ

Also, the test with only DBI and no Dancer here:
http://paste.perldancer.org/uzagWiCYXUsj
that doesn't "leak" anything.

mje_ on IRC did some experiments and found out that when using
prepare_cached the scalar count doesn't change.

But then, strange enough to have prepare leaking inside dancer, and not
outside. :-|

Cheers
Alberto (aka ambs)



On Tue, May 7, 2013 at 1:36 PM, Alberto Simões <hashas...@gmail.com> wrote:

> Hello
>
> I am experiencing a behavior when using DBI inside Dancer that seems to
> result on SCALAR leaks, but only when running inside Dancer.
>
> To help diagnosing I did a couple of tests that I try to explain below.
>
> First, I developed a sample small application in Dancer. It is available
> (temporarily) in http://paste.perldancer.org/2yIABT6Yreh5T. Basically, it
> has two routes. One that calls Devel::Gladiator and dumps the count for
> each type of variables currently available, and another route that returns
> OK. This route has a prepare statement (line 27) that is my problem.
>
> If I comment that line, and test calling the main route different times
> (calling the arena between calls) I get the result in
> http://paste.perldancer.org/sWhBrp2rh1lq. Basically, first 5 hits are
> discarded, just to make sure all variables and caches prepared by Dancer
> are filled in, and then I call the main route 100 times. You might notice
> the amount of scalars rarely changes, and at the end, the summary is
> negative (less two scalars than the amount we had when beginning the test).
>
> If I uncomment, then I get http://paste.perldancer.org/1mjhfOfwxEJxf,
> where you might notice almost each call increments a SCALAR into memory. At
> the end, the summary is 97 wasted scalars (almost the same number of hits).
>
> Although I imagine DBI does some kind of cache, it is weird it stores 97
> copies for the same query. Nevertheless, I tried a similar approach without
> Dancer, and NO SCALAR gets lost at all.
>
> Also, tried to do, in the same route, two prepares, and the number of lost
> scalars doubles. If I do only one prepare but two execute/fetch, I get only
> one scalar lost.
>
> So, this is something about Dancer and DBI together. But I have no idea of
> what might be going on.
>
>
> If you need some more details, or that I run some test, please poke me at
> #dbi on irc.perl.org (ambs).
>
> Thanks,
> Alberto (aka ambs)
>
> --
> Alberto Simões
>



-- 
Alberto Simões

Reply via email to