[asterisk-users] endwhile jumping out of macro

Matthew Jordan mjordan at digium.com
Mon Nov 30 11:50:08 CST 2015


On Mon, Nov 30, 2015 at 11:34 AM, Ethy H. Brito <ethy.brito at inexo.com.br>
wrote:

> 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>
> > wrote:
> >
> > >
> > > 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.
>
>
Yup - ExitWhile.

https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Application_ExitWhile


> >
> > 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?
>

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

-- 
Matthew Jordan
Digium, Inc. | Director of Technology
445 Jan Davis Drive NW - Huntsville, AL 35806 - USA
Check us out at: http://digium.com & http://asterisk.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-users/attachments/20151130/2c5252cf/attachment.html>


More information about the asterisk-users mailing list