[asterisk-users] endwhile jumping out of macro
Ethy H. Brito
ethy.brito at inexo.com.br
Mon Nov 30 11:34:12 CST 2015
On Mon, 30 Nov 2015 09:40:50 -0600
Matthew Jordan <mjordan at digium.com> wrote:
> On Sat, Nov 28, 2015 at 7:14 AM, Ethy H. Brito <ethy.brito at inexo.com.br>
> > 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 at 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 at 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?
> Yes it could. A While loop should be terminated with an EndWhile.
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.
> 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.
Can you please point me some good tutorial on converting Macros to subroutines?
Or on subroutines operation themselves?
More information about the asterisk-users