Here is an update where I am in testing right now.

Having noted that using one_event() does not cause a memory growth problem I
thought I would change Event.xs to make loop() be a while(1) loop calling
safe_one_event(). The purpose of the test was to see if that would solve the
growth problem.  It would not be a solution in and of itself.

In Event.xs, I change _loop() to:

    PROTOTYPE: ;$
    CODE:
    double maxtm = 60;
    if (items == 1) maxtm = SvNV(ST(0));
    while (1) { safe_one_event(maxtm);}
    OUTPUT:

I thought this would be the Event.pm equivalent of doing one_event() inside
a while loop in a perl script.

I was wrong! There is still growth problems!  Now I am really confused!  Why
doesn't this behave the same as a script based?:

    while (1) {
        Event::one_event(1);
    }

One work around to the growth problem is to have a timer do an unloop() and
then wrap Event::loop() in a while(1) loop.  I've done this with a timer
interval of 5 seconds and the growth seems to end.  While not an answer, it
is a way to work with the current Event.pm/perl problem and solve the growth
problem with minimal pain.  Depending on the application a larger interval
could also be used.

To do this, one would add the following to their script:

    Event->timer(interval => 5, cb => sub{unloop;});

then change their Event::loop; line to
    while (1) {
        Event::loop;
    }

Brad

Reply via email to