When I had following in my ael file:
macro say_number(n)
{
if (${n} >= 1001 && ${n} <= 999999)
{
if (${n}/1000 != 1)
{
&say_number(${n}/1000);
};
n=${n}%1000;
if (${n})
{
BackGround(1000_);
&say_number(${n});
}
else
BackGround(1000);
}
else if (${n} = 1000)
{
BackGround(1000);
}
else if (${n} >= 901 && ${n} <= 999)
{
BackGround(900_);
n=${n} % 900;
&say_number(${n});
}
else if (${n} = 900)
{
BackGround(900);
}
else if (${n} >= 801 && ${n} <= 899)
{
BackGround(800_);
n=${n} % 800;
&say_number(${n});
}
else if (${n} = 800)
{
BackGround(800);
}
else if (${n} >= 701 && ${n} <= 799)
{
BackGround(700_);
n=${n} % 700;
&say_number(${n});
}
else if (${n} = 700)
{
BackGround(700);
}
else if (${n} >= 601 && ${n} <= 699)
{
BackGround(600_);
n=${n} % 600;
&say_number(${n});
}
else if (${n} = 600)
{
BackGround(600);
}
else if (${n} >= 501 && ${n} <= 599)
{
BackGround(500_);
n=${n} % 500;
&say_number(${n});
}
else if (${n} = 500)
{
BackGround(500);
}
else if (${n} >= 401 && ${n} <= 499)
{
BackGround(400_);
n=${n} % 400;
&say_number(${n});
}
else if (${n} = 400)
{
BackGround(400);
}
else if (${n} >= 301 && ${n} <= 399)
{
BackGround(300_);
n=${n} % 300;
&say_number(${n});
}
else if (${n} = 300)
{
BackGround(300);
}
else if (${n} >= 201 && ${n} <= 299)
{
BackGround(200_);
n=${n} % 200;
&say_number(${n});
}
else if (${n} = 200)
{
BackGround(200);
}
else if (${n} >= 101 && ${n} <= 199)
{
BackGround(100_);
n=${n} % 100;
&say_number(${n});
}
else if (${n} = 100)
{
BackGround(100);
}
else if (${n} >= 81 && ${n} <= 99)
{
BackGround(40_);
n=${n} % 80;
&say_number(${n});
}
else if (${n} = 80)
{
BackGround(80);
}
else if (${n} >= 61 && ${n} <= 79)
{
BackGround(60_);
n=${n} % 60;
&say_number(${n});
}
else if (${n} = 60)
{
BackGround(60);
}
else if (${n} >= 41 && ${n} <= 59)
{
BackGround(40_);
n=${n} % 40;
&say_number(${n});
}
else if (${n} = 40)
{
BackGround(40);
}
else if (${n} >= 21 && ${n} <= 39)
{
BackGround(20_);
n=${n} % 20;
&say_number(${n});
}
else if (${n} >= 0 && ${n} <= 20)
{
BackGround(${n});
}
};
Asterisk was restarting when using ael reload command.
I have configured logger.conf with option
and only thing it writes to log file when restarting is registering macro-say_number, then it restarts. Here’s piece of log file:
[Jul 29 22:48:40] VERBOSE[4004] logger.c: -- Registered extension context 'macro-say_number'
[Jul 29 22:48:45] VERBOSE[4028] logger.c: Asterisk Event Logger Started /var/log/asterisk/event_log
[Jul 29 22:48:45] VERBOSE[4028] logger.c: Asterisk Dynamic Loader Starting:
I came to conclusion that this behavior is caused by number of continuous else-if statements, which are currently 28. When I remove any 2 of them and number of continuous else-if blocks decreases to 26, asterisk doesn’t restart on ael reload command.
I’ve changed the code to following. Now it works.
macro say_number(n)
{
if (${n} >= 1001 && ${n} <= 999999)
{
if (${n} = 1000)
{
BackGround(1000);
}
else if (${n}/1000 != 1)
{
&say_number(${n}/1000);
};
n=${n}%1000;
if (${n})
{
BackGround(1000_);
&say_number(${n});
}
else
BackGround(1000);
}
else if (${n} >= 901 && ${n} <= 999)
{
if (${n} = 900)
{
BackGround(900);
}
else
BackGround(900_);
n=${n} % 900;
&say_number(${n});
}
else if (${n} >= 800 && ${n} <= 899)
{
if (${n} = 800)
{
BackGround(800);
}
else
BackGround(800_);
n=${n} % 800;
&say_number(${n});
}
else if (${n} >= 700 && ${n} <= 799)
{
if (${n} = 700)
{
BackGround(700);
}
else
BackGround(700_);
n=${n} % 700;
&say_number(${n});
}
else if (${n} >= 600 && ${n} <= 699)
{
if (${n} = 600)
{
BackGround(600);
}
else
BackGround(600_);
n=${n} % 600;
&say_number(${n});
}
else if (${n} >= 500 && ${n} <= 599)
{
if (${n} = 500)
{
BackGround(500);
}
else
BackGround(500_);
n=${n} % 500;
&say_number(${n});
}
else if (${n} >= 400 && ${n} <= 499)
{
if (${n} = 400)
{
BackGround(400);
}
else
BackGround(400_);
n=${n} % 400;
&say_number(${n});
}
else if (${n} >= 300 && ${n} <= 399)
{
if (${n} = 300)
{
BackGround(300);
}
else
BackGround(300_);
n=${n} % 300;
&say_number(${n});
}
else if (${n} >= 200 && ${n} <= 299)
{
if (${n} = 200)
{
BackGround(200);
}
else
BackGround(200_);
n=${n} % 200;
&say_number(${n});
}
else if (${n} >= 100 && ${n} <= 199)
{
if (${n} = 100)
{
BackGround(100);
}
else
BackGround(100_);
n=${n} % 100;
&say_number(${n});
}
else if (${n} >= 80 && ${n} <= 99)
{
if (${n} = 80)
{
BackGround(80);
}
else
BackGround(40_);
n=${n} % 80;
&say_number(${n});
}
else if (${n} >= 60 && ${n} <= 79)
{
if (${n} = 60)
{
BackGround(60);
}
else
BackGround(60_);
n=${n} % 60;
&say_number(${n});
}
else if (${n} >= 40 && ${n} <= 59)
{
if (${n} = 40)
{
BackGround(40);
}
else
BackGround(40_);
n=${n} % 40;
&say_number(${n});
}
else if (${n} >= 20 && ${n} <= 39)
{
if (${n} = 20)
{
BackGround(20);
}
else
BackGround(20_);
n=${n} % 20;
&say_number(${n});
}
else if (${n} >= 0 && ${n} <= 19)
{
BackGround(${n});
}
};
Any idea?