Endwhile Jumping Out Of Macro
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
Yup – ExitWhile.
https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Application_ExitWhile
The Asterisk wiki has a number of pages on this subject, including the
‘special’ subroutines (hangup handlers, pre-dial handlers, etc.):
https://wiki.asterisk.org/wiki/display/AST/GoSub