Endwhile Jumping Out Of Macro

Home » Asterisk Users » Endwhile Jumping Out Of Macro
Asterisk Users 3 Comments

Hi

I have a 3 level nested while-endwhile loop in a macro that when the execution reaches endwhile, it is jumping out to the While at the caller macro.

It shouldn’t since the are instructions after the endwhile.

— Executing [s@macro-call-from-outside:72] EndWhile(“DAHDI/i1/1234567-4a7f”, “”) in new stack
== Channel ‘DAHDI/i1/1234567-4a7f’ jumping out of macro ‘call-from-outside’
— Executing [s@macro-recurse_check_redirect_not_mailbox:7]
While(“DAHDI/i1/1234567-4a7f”, “1”) in new stack

I checked the while-endwhile balance and it seems ok. I also checked if I GoTo() outside the loop. I don’t.

Macroexit is executed inside the while-endwhile loop in certain cases exiting some inner loop.

Could MacroExiting inside a while loop cause this lost of balance?

Regards

Ethy

3 thoughts on - Endwhile Jumping Out Of Macro

  • Yes it could. A While loop should be terminated with an EndWhile.

    Both the While application as well as the Macro application attempt to control the PBX flow while a channel is executing within them. Terminating an outer container of PBX flow without properly terminating an inner one can inbalance the stack.

    And just as a reminder, Macros are deprecated. They tend to have odd side effects at times, and overly nesting Macros can result in a crash. You should consider switching to subroutines.

    Matt

  • I’ve already suspected that. I did some changes in the code. It is now running smooth.

    BTW, is there a “breakwhile” or something like that, that jumps out of a while-endwhile loop? Just like the “C” break command.

    Can you please point me some good tutorial on converting Macros to subroutines?
    Or on subroutines operation themselves?

    Regards

    Ethy