on theHandler
    # do things
    send theHandler to me in 1 millisecond
end theHandler

Would this trigger a Metacard recursion count?


It shouldn't. What happens is this:

1. theHandler is triggered.
2. A message is queued to trigger theHandler again.
3. theHandler finishes executing.
4. theHandler is triggered by the pending message.

As you can see, the first copy of the handler completes and exits in step 3. Thus, you only have one copy of the handler in memory at once.

On the other hand, this:

on theHandler
    # do things
    theHandler
end theHandler

Produces this result:

1. theHandler is triggered.
2. theHandler calls a second copy of itself.
3. The second copy calls a third.
4. The third copy calls a fourth.
...

After 4 steps there are 4 handlers in memory, and you are recursing. The first copy can't release until the second does, the second is waiting for the third, the third is waiting on the fourth, etc. Until all of those handlers start terminating without recursing any further, you'll just keep on eating memory- and Metacard will bail you out with an error.

HTH,
Brian




Reply via email to