-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/3891/
-----------------------------------------------------------

Review request for Asterisk Developers and Matt Jordan.


Bugs: ASTERISK-23818
    https://issues.asterisk.org/jira/browse/ASTERISK-23818


Repository: Asterisk


Description
-------

ASTERISK-23818 (lua contexts being overwritten by contexts of the same name in 
pbx_config) surfaced because pbx_lua, having the AST_MODFLAG_GLOBAL_SYMBOLS 
set, was always force loaded before pbx_config.  Since I couldn't find any 
reason for pbx_lua to export it's symbols to the rest of Asterisk, I simply 
changed the flag to AST_MODFLAG_DEFAULT.  Problem solved.  What I didn't 
realize was that the symbols need to be exported not because Asterisk needs 
them but because any external Lua modules like luasql.mysql need the base Lua 
language APIs exported (ASTERISK-17279).

Back to ASTERISK-23818...  It looks like there's an issue in pbx.c where 
context_merge was only merging includes, switches and ignore patterns if the 
context was already existing AND has extensions, or if the context was brand 
new.  If pbx_lua is loaded before pbx_config, the context will exist BUT 
pbx_lua, being implemented as a switch, will never place extensions in it, just 
the switch statement.  The result is that when pbx_config loads, it never 
merges the switch statement created by pbx_lua into the final context.

This patch sets pbx_lua's modflag back to AST_MODFLAG_GLOBAL_SYMBOLS and adds 
an "else if" in context_merge that catches the case where an existing context 
has includes, switchs or ingore patterns but no actual extensions.

For later...  "dialplan show" always shows extensions, includes, then switches 
but pbx_find_extension actually processes extensions, switches then includes.  
Which is correct?

Also, it appears that switches and includes are always inserted at the tail of 
their respective lists, but the lists are searched in reverse.  The result is 
that the last module loaded is searched for a matching extension first.  Is 
this expected behavior?

This patch needs to be applied from 1.8 through trunk.


Diffs
-----

  branches/1.8/pbx/pbx_lua.c 420123 
  branches/1.8/main/pbx.c 420123 

Diff: https://reviewboard.asterisk.org/r/3891/diff/


Testing
-------

Ran the TestSuite before and after with the same results.  461 run, 397 passed, 
64 failed.

Confirmed that external Lua modules properly initialize.  I used luasql.mysql 
as a test.

Ran tests with various merge scenarios between pbx_config, pbx_lua and pbx_ael 
to make sure that where contexts overlap, includes, switches, and ingore 
patterns are preserved in the merge process.  Extensions are different...  
pbx_config and pbx_ael share the same global dialplan so the first definition 
of context/exten/priority wins and subsequent are rejected.  pbx_lua maintains 
it's own environment so even if it happens to define the same context/exten as 
pbx_config or pbx_ael it'll never be called because pbx_find_extension will 
never search pbx_lua unless the global table is exhausted.


Thanks,

George Joseph

-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

Reply via email to