On Mon, Nov 30, 2015 at 11:34 AM, Ethy H. Brito <[email protected]> wrote:
> On Mon, 30 Nov 2015 09:40:50 -0600 > Matthew Jordan <[email protected]> wrote: > > > On Sat, Nov 28, 2015 at 7:14 AM, Ethy H. Brito <[email protected]> > > 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@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? > > > > > > > > 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
-- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- New to Asterisk? Join us for a live introductory webinar every Thurs: http://www.asterisk.org/hello asterisk-users mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/asterisk-users
